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

80 lines
1.7 KiB
Nim
Raw Normal View History

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-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
PacketKind* {.pure.} = enum
`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
of PacketKind.`Turn`:
2022-12-08 08:15:01 +00:00
`turn`*: Turn
of PacketKind.`Error`:
2022-12-08 08:15:01 +00:00
`error`*: Error
of PacketKind.`Extension`:
2022-12-08 08:15:01 +00:00
`extension`*: Extension
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
of EventKind.`Assert`:
2022-12-08 08:15:01 +00:00
`assert`*: Assert
of EventKind.`Retract`:
`retract`*: Retract
of EventKind.`Message`:
2022-12-08 08:15:01 +00:00
`message`*: Message
of EventKind.`Sync`:
2022-12-08 08:15:01 +00:00
`sync`*: Sync
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))