aboutsummaryrefslogtreecommitdiff
path: root/app/request.go
diff options
context:
space:
mode:
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
+}