syndicate_utils/src/http_protocol.nim

41 lines
1023 B
Nim

import
std/typetraits, preserves, std/tables, std/sets
type
Path* = seq[string]
Headers* = TableRef[string, seq[string]]
Response* {.preservesRecord: "http".} = object
`handle`*: int
`code`*: int
`headers`*: Headers
`body`*: string
Handler*[E] {.preservesRecord: "handler".} = ref object
`methods`*: Methods
`path`*: Path
`entity`*: Preserve[E]
`Method`* {.preservesOr, pure.} = enum
`GET`, `HEAD`, `POST`, `PUT`, `DELETE`, `CONNECT`, `OPTIONS`, `TRACE`,
`PATCH`
Request* {.preservesRecord: "http".} = object
`handle`*: int
`method`*: Method
`headers`*: Headers
`path`*: Path
`body`*: string
Methods* = HashSet[Method]
proc `$`*[E](x: Handler[E]): string =
`$`(toPreserve(x, E))
proc encode*[E](x: Handler[E]): seq[byte] =
encode(toPreserve(x, E))
proc `$`*(x: Path | Headers | Response | Request | Methods): string =
`$`(toPreserve(x))
proc encode*(x: Path | Headers | Response | Request | Methods): seq[byte] =
encode(toPreserve(x))