syndicate_utils/src/schema/http_protocol.nim

39 lines
1.0 KiB
Nim
Raw Normal View History

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