aboutsummaryrefslogtreecommitdiff
path: root/app/request.go
diff options
context:
space:
mode:
authorjet2tlf <jet2tlf@gmail.com>2024-06-03 16:28:07 +0000
committerjet2tlf <jet2tlf@gmail.com>2024-06-03 16:28:07 +0000
commit8a94110728cca144388958d4bd322045f8bfb9e4 (patch)
tree898e27b416ad1a8c828a6af27d122b7fc83be307 /app/request.go
parent7225eed4e2609ec4ac02a377bd6505370d4442d4 (diff)
downloadhttp-server-go-8a94110728cca144388958d4bd322045f8bfb9e4.tar.gz
http-server-go-8a94110728cca144388958d4bd322045f8bfb9e4.zip
codecrafters submit [skip ci]
Diffstat (limited to 'app/request.go')
-rw-r--r--app/request.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/app/request.go b/app/request.go
new file mode 100644
index 0000000..a859154
--- /dev/null
+++ b/app/request.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "fmt"
+ "io"
+)
+
+type Request struct {
+ Method string
+ Target string
+ Version string
+}
+
+func NewRequest(reader io.Reader) (*Request, error) {
+ scanner := bufio.NewScanner(reader)
+
+ ok := scanner.Scan()
+ if !ok {
+ err := scanner.Err()
+ if err == nil {
+ err = io.EOF
+ }
+
+ return nil, err
+ }
+
+ line := scanner.Bytes()
+ elements := bytes.Split(line, []byte(" "))
+
+ if len(elements) != 3 {
+ return nil, fmt.Errorf("invalid request, excepted 3 elements, got %d", len(elements))
+ }
+
+ return &Request{Method: string(elements[0]), Target: string(elements[1]), Version: string(elements[2])}, nil
+}