syndicate-nim/src/sam/protocols/gatekeeper.nim

104 lines
2.7 KiB
Nim
Raw Normal View History

import
2023-05-18 10:20:44 +00:00
preserves
type
2023-12-31 17:15:06 +00:00
Bind* {.preservesRecord: "bind".} = object
`description`*: Description
2024-01-07 22:11:59 +00:00
`target`* {.preservesEmbedded.}: EmbeddedRef
2023-12-31 17:15:06 +00:00
`observer`*: BindObserver
2023-12-31 17:15:06 +00:00
Route* {.preservesRecord: "route".} = object
`transports`*: seq[Value]
`pathSteps`* {.preservesTupleTail.}: seq[PathStep]
2023-05-18 10:20:44 +00:00
BindObserverKind* {.pure.} = enum
`present`, `absent`
2023-12-31 17:15:06 +00:00
`BindObserver`* {.preservesOr.} = object
2023-05-18 10:20:44 +00:00
case orKind*: BindObserverKind
of BindObserverKind.`present`:
2024-01-07 22:11:59 +00:00
`present`* {.preservesEmbedded.}: EmbeddedRef
2023-05-18 10:20:44 +00:00
of BindObserverKind.`absent`:
`absent`* {.preservesLiteral: "#f".}: bool
2023-12-31 17:15:06 +00:00
TransportConnection* {.preservesRecord: "connect-transport".} = object
`addr`*: Value
2024-01-07 22:11:59 +00:00
`control`* {.preservesEmbedded.}: EmbeddedRef
2023-12-31 17:15:06 +00:00
`resolved`*: Resolved
2023-05-18 10:20:44 +00:00
2023-12-31 17:15:06 +00:00
Step* = Value
ResolvedPathStep* {.preservesRecord: "path-step".} = object
2024-01-07 22:11:59 +00:00
`origin`* {.preservesEmbedded.}: EmbeddedRef
2023-12-31 17:15:06 +00:00
`pathStep`*: PathStep
`resolved`*: Resolved
2023-05-18 10:20:44 +00:00
BoundKind* {.pure.} = enum
`bound`, `Rejected`
2023-12-31 17:15:06 +00:00
BoundBound* {.preservesRecord: "bound".} = object
`pathStep`*: PathStep
2023-05-18 10:20:44 +00:00
2023-12-31 17:15:06 +00:00
`Bound`* {.preservesOr.} = object
2023-05-18 10:20:44 +00:00
case orKind*: BoundKind
of BoundKind.`bound`:
2023-12-31 17:15:06 +00:00
`bound`*: BoundBound
2023-05-18 10:20:44 +00:00
of BoundKind.`Rejected`:
2023-12-31 17:15:06 +00:00
`rejected`*: Rejected
2023-05-18 10:20:44 +00:00
ForceDisconnect* {.preservesRecord: "force-disconnect".} = object
2023-12-31 17:15:06 +00:00
Description* = Value
Rejected* {.preservesRecord: "rejected".} = object
`detail`*: Value
2023-05-18 10:20:44 +00:00
2023-12-31 17:15:06 +00:00
Resolve* {.preservesRecord: "resolve".} = object
`step`*: Step
2024-01-07 22:11:59 +00:00
`observer`* {.preservesEmbedded.}: EmbeddedRef
2023-05-18 10:20:44 +00:00
ResolvedKind* {.pure.} = enum
`accepted`, `Rejected`
2023-12-31 17:15:06 +00:00
ResolvedAccepted* {.preservesRecord: "accepted".} = object
2024-01-07 22:11:59 +00:00
`responderSession`* {.preservesEmbedded.}: EmbeddedRef
2023-05-18 10:20:44 +00:00
2023-12-31 17:15:06 +00:00
`Resolved`* {.preservesOr.} = object
2023-05-18 10:20:44 +00:00
case orKind*: ResolvedKind
of ResolvedKind.`accepted`:
2024-01-07 22:11:59 +00:00
`accepted`* {.preservesEmbedded.}: ResolvedAccepted
2023-05-18 10:20:44 +00:00
of ResolvedKind.`Rejected`:
2023-12-31 17:15:06 +00:00
`rejected`*: Rejected
2023-05-18 10:20:44 +00:00
TransportControl* = ForceDisconnect
2023-12-31 17:15:06 +00:00
ResolvePath* {.preservesRecord: "resolve-path".} = object
`route`*: Route
`addr`*: Value
2024-01-07 22:11:59 +00:00
`control`* {.preservesEmbedded.}: EmbeddedRef
2023-12-31 17:15:06 +00:00
`resolved`*: Resolved
PathStep* = Value
proc `$`*(x: Bind | Route | BindObserver | TransportConnection |
ResolvedPathStep |
Bound |
ForceDisconnect |
Rejected |
Resolve |
Resolved |
TransportControl |
ResolvePath): string =
`$`(toPreserves(x))
proc encode*(x: Bind | Route | BindObserver | TransportConnection |
ResolvedPathStep |
Bound |
ForceDisconnect |
Rejected |
Resolve |
Resolved |
TransportControl |
ResolvePath): seq[byte] =
encode(toPreserves(x))