41 lines
1023 B
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))
|