75 lines
1.6 KiB
Nim
75 lines
1.6 KiB
Nim
|
|
import
|
|
preserves
|
|
|
|
type
|
|
Error* {.preservesRecord: "error".} = object
|
|
`message`*: string
|
|
`detail`*: Value
|
|
|
|
Turn* = seq[TurnEvent]
|
|
Message* {.preservesRecord: "M".} = object
|
|
`body`*: Assertion
|
|
|
|
Retract* {.preservesRecord: "R".} = object
|
|
`handle`*: Handle
|
|
|
|
Assert* {.preservesRecord: "A".} = object
|
|
`assertion`*: Assertion
|
|
`handle`*: Handle
|
|
|
|
Extension* = Value
|
|
Sync* {.preservesRecord: "S".} = 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))
|