syndicate-nim/src/syndicate/protocols/worker.nim

25 lines
785 B
Nim

import
std/typetraits, preserves
type
Instance*[E = void] {.record: "Instance".} = ref object ## ``<Instance @name string @argument any>``
`name`*: string
`argument`*: Preserve[E]
proc `instance`*[E = void](`name`: string | Preserve[E]; `argument`: Preserve[E]): Preserve[
E] =
## Preserves constructor for ``Instance``.
initRecord[E](symbol[E]("Instance"), toPreserve(`name`, E),
toPreserve(`argument`, E))
proc toPreserveHook*(`instance`: Instance; E: typedesc): Preserve[E] =
initRecord[E](symbol[E]("Instance"), toPreserve(`instance`.`name`, E),
toPreserve(`instance`.`argument`, E))
proc `$`*[E](x: Instance[E]): string =
`$`(toPreserve(x, E))
proc `encode`*[E](x: Instance[E]): seq[byte] =
encode(toPreserve(x, E))