import preserves type Error* {.preservesRecord: "error".} = object `message`*: string `detail`*: Value Turn* = seq[TurnEvent] Message* {.preservesRecord: "message".} = object `body`*: Assertion Retract* {.preservesRecord: "retract".} = object `handle`*: Handle Assert* {.preservesRecord: "assert".} = object `assertion`*: Assertion `handle`*: Handle Extension* = Value Sync* {.preservesRecord: "sync".} = object `peer`* {.preservesEmbedded.}: Value TurnEvent* {.preservesTuple.} = object `oid`*: Oid `event`*: Event Oid* = BiggestInt Assertion* = Value Handle* = BiggestInt PacketKind* {.pure.} = enum `Turn`, `Error`, `Extension` `Packet`* {.preservesOr.} = object case orKind*: PacketKind of PacketKind.`Turn`: `turn`* {.preservesEmbedded.}: Turn of PacketKind.`Error`: `error`*: Error of PacketKind.`Extension`: `extension`*: Extension EventKind* {.pure.} = enum `Assert`, `Retract`, `Message`, `Sync` `Event`* {.preservesOr.} = object case orKind*: EventKind of EventKind.`Assert`: `assert`*: Assert of EventKind.`Retract`: `retract`*: Retract of EventKind.`Message`: `message`*: Message of EventKind.`Sync`: `sync`* {.preservesEmbedded.}: Sync proc `$`*(x: Error | Turn | Message | Retract | Assert | Sync | TurnEvent | Oid | Handle | Packet | Event): string = `$`(toPreserves(x)) proc encode*(x: Error | Turn | Message | Retract | Assert | Sync | TurnEvent | Oid | Handle | Packet | Event): seq[byte] = encode(toPreserves(x))