import preserves type Bind*[Cap] {.preservesRecord: "bind".} = object `description`*: Description[Cap] `target`*: Cap `observer`*: BindObserver[Cap] 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] `observer`*: Cap 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 = `$`(toPreserve(x, Cap)) 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] = encode(toPreserve(x, Cap)) proc `$`*(x: ForceDisconnect | TransportControl): string = `$`(toPreserve(x)) proc encode*(x: ForceDisconnect | TransportControl): seq[byte] = encode(toPreserve(x))