syndicate-nim/src/syndicate/protocols/dataspace.nim

25 lines
886 B
Nim

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