Initial commit
This commit is contained in:
commit
1368b7b69b
10 changed files with 588 additions and 0 deletions
79
http/http.odin
Normal file
79
http/http.odin
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
package http
|
||||
|
||||
import "core:strconv"
|
||||
|
||||
RequestError :: enum {
|
||||
InvalidRequestLine,
|
||||
InvalidMethod,
|
||||
InvalidHeaderFormat,
|
||||
IncompleteRequest,
|
||||
ContentLengthMismatch,
|
||||
FailedParsing,
|
||||
NetworkError,
|
||||
}
|
||||
|
||||
ResponseError :: enum {
|
||||
InvalidContentType,
|
||||
InvalidStatus,
|
||||
}
|
||||
|
||||
Header :: map[string]string
|
||||
|
||||
Status :: enum u32 {
|
||||
Ok = 200,
|
||||
BadRequest = 400,
|
||||
NotFound = 404,
|
||||
InternalServerError = 500,
|
||||
}
|
||||
|
||||
ContentType :: enum {
|
||||
Html,
|
||||
Image,
|
||||
}
|
||||
|
||||
Response :: struct {
|
||||
header: Header,
|
||||
proto_version: string,
|
||||
status: Status,
|
||||
body: []byte,
|
||||
}
|
||||
|
||||
Method :: enum {
|
||||
GET,
|
||||
POST,
|
||||
PUT,
|
||||
DELETE,
|
||||
}
|
||||
|
||||
Request :: struct {
|
||||
header: Header,
|
||||
proto_version: string,
|
||||
method: Method,
|
||||
path: string,
|
||||
body: []byte,
|
||||
path_variables: map[string]string,
|
||||
}
|
||||
|
||||
make_response :: proc(
|
||||
status: Status,
|
||||
body: []byte,
|
||||
content_type: ContentType,
|
||||
allocator := context.temp_allocator,
|
||||
) -> Response {
|
||||
response := Response {
|
||||
status = status,
|
||||
proto_version = "HTTP/1.1",
|
||||
header = make(Header, allocator),
|
||||
body = body,
|
||||
}
|
||||
|
||||
buf := make([]byte, 32, allocator)
|
||||
response.header["Content-Length"] = strconv.write_uint(
|
||||
buf[:],
|
||||
u64(len(body)),
|
||||
10,
|
||||
)
|
||||
response.header["Content-Type"] = str_from_content_type(content_type)
|
||||
|
||||
return response
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue