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

75 lines
1.6 KiB
Nim
Raw Normal View History

import
2023-05-18 10:20:44 +00:00
preserves
type
2022-12-08 08:15:01 +00:00
Error* {.preservesRecord: "error".} = object
2021-09-24 19:25:47 +00:00
`message`*: string
2023-12-31 17:15:06 +00:00
`detail`*: Value
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
2023-12-31 17:15:06 +00:00
Extension* = Value
2022-12-08 08:15:01 +00:00
Sync* {.preservesRecord: "sync".} = object
2024-01-14 10:09:49 +00:00
`peer`* {.preservesEmbedded.}: Value
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
2023-12-31 17:15:06 +00:00
Assertion* = Value
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`:
2024-01-07 22:11:59 +00:00
`turn`* {.preservesEmbedded.}: 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`:
2024-01-07 22:11:59 +00:00
`sync`* {.preservesEmbedded.}: Sync
2023-05-18 10:20:44 +00:00
proc `$`*(x: Error | Turn | Message | Retract | Assert | Sync | TurnEvent | Oid |
2022-12-08 08:15:01 +00:00
Handle |
Packet |
Event): string =
2023-12-31 17:15:06 +00:00
`$`(toPreserves(x))
2021-09-24 19:25:47 +00:00
2023-05-18 10:20:44 +00:00
proc encode*(x: Error | Turn | Message | Retract | Assert | Sync | TurnEvent |
2022-12-08 08:15:01 +00:00
Oid |
Handle |
Packet |
Event): seq[byte] =
2023-12-31 17:15:06 +00:00
encode(toPreserves(x))