104 lines
2.7 KiB
Nim
104 lines
2.7 KiB
Nim
|
|
import
|
|
preserves
|
|
|
|
type
|
|
Bind* {.preservesRecord: "bind".} = object
|
|
`description`*: Description
|
|
`target`* {.preservesEmbedded.}: EmbeddedRef
|
|
`observer`*: BindObserver
|
|
|
|
Route* {.preservesRecord: "route".} = object
|
|
`transports`*: seq[Value]
|
|
`pathSteps`* {.preservesTupleTail.}: seq[PathStep]
|
|
|
|
BindObserverKind* {.pure.} = enum
|
|
`present`, `absent`
|
|
`BindObserver`* {.preservesOr.} = object
|
|
case orKind*: BindObserverKind
|
|
of BindObserverKind.`present`:
|
|
`present`* {.preservesEmbedded.}: EmbeddedRef
|
|
|
|
of BindObserverKind.`absent`:
|
|
`absent`* {.preservesLiteral: "#f".}: bool
|
|
|
|
|
|
TransportConnection* {.preservesRecord: "connect-transport".} = object
|
|
`addr`*: Value
|
|
`control`* {.preservesEmbedded.}: EmbeddedRef
|
|
`resolved`*: Resolved
|
|
|
|
Step* = Value
|
|
ResolvedPathStep* {.preservesRecord: "path-step".} = object
|
|
`origin`* {.preservesEmbedded.}: EmbeddedRef
|
|
`pathStep`*: PathStep
|
|
`resolved`*: Resolved
|
|
|
|
BoundKind* {.pure.} = enum
|
|
`bound`, `Rejected`
|
|
BoundBound* {.preservesRecord: "bound".} = object
|
|
`pathStep`*: PathStep
|
|
|
|
`Bound`* {.preservesOr.} = object
|
|
case orKind*: BoundKind
|
|
of BoundKind.`bound`:
|
|
`bound`*: BoundBound
|
|
|
|
of BoundKind.`Rejected`:
|
|
`rejected`*: Rejected
|
|
|
|
|
|
ForceDisconnect* {.preservesRecord: "force-disconnect".} = object
|
|
|
|
Description* = Value
|
|
Rejected* {.preservesRecord: "rejected".} = object
|
|
`detail`*: Value
|
|
|
|
Resolve* {.preservesRecord: "resolve".} = object
|
|
`step`*: Step
|
|
`observer`* {.preservesEmbedded.}: EmbeddedRef
|
|
|
|
ResolvedKind* {.pure.} = enum
|
|
`accepted`, `Rejected`
|
|
ResolvedAccepted* {.preservesRecord: "accepted".} = object
|
|
`responderSession`* {.preservesEmbedded.}: EmbeddedRef
|
|
|
|
`Resolved`* {.preservesOr.} = object
|
|
case orKind*: ResolvedKind
|
|
of ResolvedKind.`accepted`:
|
|
`accepted`* {.preservesEmbedded.}: ResolvedAccepted
|
|
|
|
of ResolvedKind.`Rejected`:
|
|
`rejected`*: Rejected
|
|
|
|
|
|
TransportControl* = ForceDisconnect
|
|
ResolvePath* {.preservesRecord: "resolve-path".} = object
|
|
`route`*: Route
|
|
`addr`*: Value
|
|
`control`* {.preservesEmbedded.}: EmbeddedRef
|
|
`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))
|