syndicate_utils/src/schema/http_protocol.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))