diff options
Diffstat (limited to 'app/request.go')
| -rw-r--r-- | app/request.go | 37 |
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 +} |