2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
import
|
|
|
|
std/typetraits, preserves
|
|
|
|
|
|
|
|
type
|
2022-12-08 08:15:01 +00:00
|
|
|
Error* {.preservesRecord: "error".} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
`message`*: string
|
2022-12-08 08:15:01 +00:00
|
|
|
`detail`*: Preserve[void]
|
2021-09-24 19:25:47 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
Turn* = seq[TurnEvent]
|
|
|
|
Message* {.preservesRecord: "message".} = object
|
|
|
|
`body`*: Assertion
|
2021-09-24 19:25:47 +00:00
|
|
|
|
|
|
|
Retract* {.preservesRecord: "retract".} = object
|
|
|
|
`handle`*: Handle
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
Assert* {.preservesRecord: "assert".} = object
|
|
|
|
`assertion`*: Assertion
|
2021-09-24 19:25:47 +00:00
|
|
|
`handle`*: Handle
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
Extension* {.preservesRecord: "label".} = object
|
2023-05-03 17:12:23 +00:00
|
|
|
`field0`*: seq[Preserve[void]]
|
2022-03-07 23:53:05 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
Sync* {.preservesRecord: "sync".} = object
|
2023-05-06 19:22:21 +00:00
|
|
|
`peer`* {.preservesLiteral: "#!<lit #t>".}: tuple[]
|
2021-09-24 19:25:47 +00:00
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
TurnEvent* {.preservesTuple.} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
`oid`*: Oid
|
2022-12-08 08:15:01 +00:00
|
|
|
`event`*: Event
|
2021-09-24 19:25:47 +00:00
|
|
|
|
2022-07-08 12:49:24 +00:00
|
|
|
Oid* = BiggestInt
|
2022-12-08 08:15:01 +00:00
|
|
|
Assertion* = Preserve[void]
|
2022-07-08 12:49:24 +00:00
|
|
|
Handle* = BiggestInt
|
2021-10-06 09:30:38 +00:00
|
|
|
PacketKind* {.pure.} = enum
|
2022-03-07 23:53:05 +00:00
|
|
|
`Turn`, `Error`, `Extension`
|
2022-12-08 08:15:01 +00:00
|
|
|
`Packet`* {.preservesOr.} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
case orKind*: PacketKind
|
2021-10-06 09:30:38 +00:00
|
|
|
of PacketKind.`Turn`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`turn`*: Turn
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
of PacketKind.`Error`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`error`*: Error
|
2021-10-06 09:30:38 +00:00
|
|
|
|
2022-03-07 23:53:05 +00:00
|
|
|
of PacketKind.`Extension`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`extension`*: Extension
|
2022-03-07 23:53:05 +00:00
|
|
|
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
EventKind* {.pure.} = enum
|
|
|
|
`Assert`, `Retract`, `Message`, `Sync`
|
2022-12-08 08:15:01 +00:00
|
|
|
`Event`* {.preservesOr.} = object
|
2021-09-24 19:25:47 +00:00
|
|
|
case orKind*: EventKind
|
2021-10-06 09:30:38 +00:00
|
|
|
of EventKind.`Assert`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`assert`*: Assert
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
of EventKind.`Retract`:
|
|
|
|
`retract`*: Retract
|
|
|
|
|
|
|
|
of EventKind.`Message`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`message`*: Message
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
of EventKind.`Sync`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`sync`*: Sync
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
proc `$`*(x: Error | Turn | Message | Retract | Assert | Extension | Sync |
|
|
|
|
TurnEvent |
|
|
|
|
Oid |
|
|
|
|
Handle |
|
|
|
|
Packet |
|
|
|
|
Event): string =
|
2021-09-24 19:25:47 +00:00
|
|
|
`$`(toPreserve(x))
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
proc encode*(x: Error | Turn | Message | Retract | Assert | Extension | Sync |
|
|
|
|
TurnEvent |
|
|
|
|
Oid |
|
|
|
|
Handle |
|
|
|
|
Packet |
|
|
|
|
Event): seq[byte] =
|
2021-09-24 19:25:47 +00:00
|
|
|
encode(toPreserve(x))
|