diff options
| author | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 16:28:07 +0000 |
|---|---|---|
| committer | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 16:28:07 +0000 |
| commit | 8a94110728cca144388958d4bd322045f8bfb9e4 (patch) | |
| tree | 898e27b416ad1a8c828a6af27d122b7fc83be307 /app/request.go | |
| parent | 7225eed4e2609ec4ac02a377bd6505370d4442d4 (diff) | |
| download | http-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.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 +} |