syndicate-nim/src/syndicate/protocols/protocol.nim

75 lines
1.6 KiB
Nim

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`* {.preservesLiteral: "#!#t".}: tuple[]
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`*: 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`*: 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))