39 lines
1.0 KiB
Nim
39 lines
1.0 KiB
Nim
|
|
import
|
|
std/typetraits, preserves, std/tables
|
|
|
|
type
|
|
Path* = seq[string]
|
|
Headers* = Table[string, seq[string]]
|
|
Response* {.preservesRecord: "http".} = object
|
|
`handle`*: BiggestInt
|
|
`code`*: BiggestInt
|
|
`headers`*: Headers
|
|
`body`*: string
|
|
|
|
Listener* {.preservesRecord: "listen".} = object
|
|
`port`*: BiggestInt
|
|
|
|
Handler* {.preservesRecord: "handler".} = object
|
|
`methods`*: Methods
|
|
`path`*: Path
|
|
`entity`* {.preservesEmbedded.}: Preserve[void]
|
|
|
|
`Method`* {.preservesOr, pure.} = enum
|
|
`GET`, `HEAD`, `POST`, `PUT`, `DELETE`, `CONNECT`, `OPTIONS`, `TRACE`,
|
|
`PATCH`
|
|
Request* {.preservesRecord: "http".} = object
|
|
`handle`*: BiggestInt
|
|
`method`*: Method
|
|
`headers`*: Headers
|
|
`path`*: Path
|
|
`body`*: string
|
|
|
|
Methods* = set[Method]
|
|
proc `$`*(x: Path | Headers | Response | Listener | Handler | Request | Methods): string =
|
|
`$`(toPreserve(x))
|
|
|
|
proc encode*(x: Path | Headers | Response | Listener | Handler | Request |
|
|
Methods): seq[byte] =
|
|
encode(toPreserve(x))
|