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