54 lines
1.8 KiB
Nim
54 lines
1.8 KiB
Nim
|
|
import
|
|
std/typetraits, preserves
|
|
|
|
type
|
|
Tcp* {.record: "tcp".} = ref object ## ``<tcp @host string @port int>``
|
|
`host`*: string
|
|
`port`*: BiggestInt
|
|
|
|
Unix* {.record: "unix".} = ref object ## ``<unix @path string>``
|
|
`path`*: string
|
|
|
|
WebSocket* {.record: "ws".} = ref object ## ``<ws @url string>``
|
|
`url`*: string
|
|
|
|
Stdio* {.record: "stdio".} = object ## ``<stdio>``
|
|
discard
|
|
|
|
proc `tcp`*[E = void](`host`: string | Preserve[E];
|
|
`port`: BiggestInt | Preserve[E]): Preserve[E] =
|
|
## Preserves constructor for ``Tcp``.
|
|
initRecord[E](symbol[E]("tcp"), toPreserve(`host`, E), toPreserve(`port`, E))
|
|
|
|
proc toPreserveHook*(`tcp`: Tcp; E: typedesc): Preserve[E] =
|
|
initRecord[E](symbol[E]("tcp"), toPreserve(`tcp`.`host`, E),
|
|
toPreserve(`tcp`.`port`, E))
|
|
|
|
proc `unix`*[E = void](`path`: string | Preserve[E]): Preserve[E] =
|
|
## Preserves constructor for ``Unix``.
|
|
initRecord[E](symbol[E]("unix"), toPreserve(`path`, E))
|
|
|
|
proc toPreserveHook*(`unix`: Unix; E: typedesc): Preserve[E] =
|
|
initRecord[E](symbol[E]("unix"), toPreserve(`unix`.`path`, E))
|
|
|
|
proc `webSocket`*[E = void](`url`: string | Preserve[E]): Preserve[E] =
|
|
## Preserves constructor for ``WebSocket``.
|
|
initRecord[E](symbol[E]("ws"), toPreserve(`url`, E))
|
|
|
|
proc toPreserveHook*(`websocket`: WebSocket; E: typedesc): Preserve[E] =
|
|
initRecord[E](symbol[E]("ws"), toPreserve(`websocket`.`url`, E))
|
|
|
|
proc `stdio`*[E = void](): Preserve[E] =
|
|
## Preserves constructor for ``Stdio``.
|
|
initRecord[E](symbol[E]("stdio"))
|
|
|
|
proc toPreserveHook*(`stdio`: Stdio; E: typedesc): Preserve[E] =
|
|
initRecord[E](symbol[E]("stdio"))
|
|
|
|
proc `$`*[E](x: Tcp | Unix | WebSocket | Stdio): string =
|
|
`$`(toPreserve(x, E))
|
|
|
|
proc `encode`*[E](x: Tcp | Unix | WebSocket | Stdio): seq[byte] =
|
|
encode(toPreserve(x, E))
|