Files
nim/caprpc/rpcschema.nim
zeekay 68037f9ca4 Rebrand Cap'n Proto Nim port to ZAP
Rename the capnp/ module set to zap/ and the capnpc compiler to zapc;
rename all .capnp schemas and fixtures to .zap; update every import,
include guard (isInZap), generated-code emission, exception type
(ZapFormatError), and the macro-generated zapUnpackStructImpl/
zapPackStructImpl identifiers to the ZAP brand. Zero capnp/Cap'n Proto
references remain in source or build files; upstream MIT attribution
(Sandstorm, Michał Zieliński) is preserved.

Raise the nimble nim floor from the fictional 0.12.0 to the locked,
verified 0.15.2 (matches nimenv.cfg/build.sh; code carries fixes through
Nim 0.18). Rewrite TODO.md as honest, source-anchored known-limitations
(two-word intersegment pointers, nested/named-union codegen, RPC
interface inheritance) instead of a bare wishlist.
2026-06-19 23:42:02 -07:00

348 lines
9.2 KiB
Nim

import zap, zap/gensupport, collections/iface
# file: caprpc/rpc.zap
type
MessageKind* {.pure.} = enum
unimplemented = 0, abort = 1, call = 2, `return` = 3, finish = 4, resolve = 5, release = 6, obsoleteSave = 7, bootstrap = 8, obsoleteDelete = 9, provide = 10, accept = 11, join = 12, disembargo = 13
Message* = ref object
case kind*: MessageKind:
of MessageKind.unimplemented:
unimplemented*: Message
of MessageKind.abort:
abort*: Exception
of MessageKind.call:
call*: Call
of MessageKind.`return`:
`return`*: Return
of MessageKind.finish:
finish*: Finish
of MessageKind.resolve:
resolve*: Resolve
of MessageKind.release:
release*: Release
of MessageKind.obsoleteSave:
discard
of MessageKind.bootstrap:
bootstrap*: Bootstrap
of MessageKind.obsoleteDelete:
discard
of MessageKind.provide:
provide*: Provide
of MessageKind.accept:
accept*: Accept
of MessageKind.join:
join*: Join
of MessageKind.disembargo:
disembargo*: Disembargo
Bootstrap* = ref object
questionId*: uint32
deprecatedObjectId*: AnyPointer
Call* = ref object
questionId*: uint32
target*: MessageTarget
interfaceId*: uint64
methodId*: uint16
params*: Payload
sendResultsTo*: Call_sendResultsTo
allowThirdPartyTailCall*: bool
Call_sendResultsToKind* {.pure.} = enum
caller = 0, yourself = 1, thirdParty = 2
Call_sendResultsTo* = object
case kind*: Call_sendResultsToKind:
of Call_sendResultsToKind.caller:
discard
of Call_sendResultsToKind.yourself:
discard
of Call_sendResultsToKind.thirdParty:
discard
ReturnKind* {.pure.} = enum
results = 0, exception = 1, canceled = 2, resultsSentElsewhere = 3, takeFromOtherQuestion = 4, acceptFromThirdParty = 5
Return* = ref object
answerId*: uint32
releaseParamCaps*: bool
case kind*: ReturnKind:
of ReturnKind.results:
results*: Payload
of ReturnKind.exception:
exception*: Exception
of ReturnKind.canceled:
discard
of ReturnKind.resultsSentElsewhere:
discard
of ReturnKind.takeFromOtherQuestion:
takeFromOtherQuestion*: uint32
of ReturnKind.acceptFromThirdParty:
discard
Finish* = ref object
questionId*: uint32
releaseResultCaps*: bool
ResolveKind* {.pure.} = enum
cap = 0, exception = 1
Resolve* = ref object
promiseId*: uint32
case kind*: ResolveKind:
of ResolveKind.cap:
cap*: CapDescriptor
of ResolveKind.exception:
exception*: Exception
Release* = ref object
id*: uint32
referenceCount*: uint32
Disembargo* = ref object
target*: MessageTarget
context*: Disembargo_context
Disembargo_contextKind* {.pure.} = enum
senderLoopback = 0, receiverLoopback = 1, accept = 2, provide = 3
Disembargo_context* = object
case kind*: Disembargo_contextKind:
of Disembargo_contextKind.senderLoopback:
senderLoopback*: uint32
of Disembargo_contextKind.receiverLoopback:
receiverLoopback*: uint32
of Disembargo_contextKind.accept:
discard
of Disembargo_contextKind.provide:
provide*: uint32
Provide* = ref object
questionId*: uint32
target*: MessageTarget
recipient*: AnyPointer
Accept* = ref object
questionId*: uint32
provision*: AnyPointer
embargo*: bool
Join* = ref object
questionId*: uint32
target*: MessageTarget
keyPart*: AnyPointer
MessageTargetKind* {.pure.} = enum
importedCap = 0, promisedAnswer = 1
MessageTarget* = ref object
case kind*: MessageTargetKind:
of MessageTargetKind.importedCap:
importedCap*: uint32
of MessageTargetKind.promisedAnswer:
promisedAnswer*: PromisedAnswer
Payload* = ref object
content*: AnyPointer
capTable*: seq[CapDescriptor]
CapDescriptorKind* {.pure.} = enum
none = 0, senderHosted = 1, senderPromise = 2, receiverHosted = 3, receiverAnswer = 4, thirdPartyHosted = 5
CapDescriptor* = ref object
case kind*: CapDescriptorKind:
of CapDescriptorKind.none:
discard
of CapDescriptorKind.senderHosted:
senderHosted*: uint32
of CapDescriptorKind.senderPromise:
senderPromise*: uint32
of CapDescriptorKind.receiverHosted:
receiverHosted*: uint32
of CapDescriptorKind.receiverAnswer:
receiverAnswer*: PromisedAnswer
of CapDescriptorKind.thirdPartyHosted:
thirdPartyHosted*: ThirdPartyCapDescriptor
PromisedAnswer* = ref object
questionId*: uint32
transform*: seq[PromisedAnswer_Op]
PromisedAnswer_OpKind* {.pure.} = enum
noop = 0, getPointerField = 1
PromisedAnswer_Op* = ref object
case kind*: PromisedAnswer_OpKind:
of PromisedAnswer_OpKind.noop:
discard
of PromisedAnswer_OpKind.getPointerField:
getPointerField*: uint16
ThirdPartyCapDescriptor* = ref object
id*: AnyPointer
vineId*: uint32
Exception* = ref object
reason*: string
obsoleteIsCallersFault*: bool
obsoleteDurability*: uint16
`type`*: Exception_Type
Exception_Type* {.pure.} = enum
failed = 0, overloaded = 1, disconnected = 2, unimplemented = 3
makeStructCoders(Message, [
(kind, 0, low(MessageKind), true)
], [
(unimplemented, 0, PointerFlag.none, MessageKind.unimplemented),
(abort, 0, PointerFlag.none, MessageKind.abort),
(call, 0, PointerFlag.none, MessageKind.call),
(`return`, 0, PointerFlag.none, MessageKind.`return`),
(finish, 0, PointerFlag.none, MessageKind.finish),
(resolve, 0, PointerFlag.none, MessageKind.resolve),
(release, 0, PointerFlag.none, MessageKind.release),
(bootstrap, 0, PointerFlag.none, MessageKind.bootstrap),
(provide, 0, PointerFlag.none, MessageKind.provide),
(accept, 0, PointerFlag.none, MessageKind.accept),
(join, 0, PointerFlag.none, MessageKind.join),
(disembargo, 0, PointerFlag.none, MessageKind.disembargo)
], [])
makeStructCoders(Bootstrap, [
(questionId, 0, 0, true)
], [
(deprecatedObjectId, 0, PointerFlag.none, true)
], [])
makeStructCoders(Call, [
(questionId, 0, 0, true),
(interfaceId, 8, 0, true),
(methodId, 4, 0, true)
], [
(target, 0, PointerFlag.none, true),
(params, 1, PointerFlag.none, true)
], [
(allowThirdPartyTailCall, 128, false, true)
])
makeStructCoders(Call_sendResultsTo, [
(kind, 6, low(Call_sendResultsToKind), true)
], [], [])
makeStructCoders(Return, [
(answerId, 0, 0, true),
(kind, 6, low(ReturnKind), true),
(takeFromOtherQuestion, 8, 0, ReturnKind.takeFromOtherQuestion)
], [
(results, 0, PointerFlag.none, ReturnKind.results),
(exception, 0, PointerFlag.none, ReturnKind.exception)
], [
(releaseParamCaps, 32, true, true)
])
makeStructCoders(Finish, [
(questionId, 0, 0, true)
], [], [
(releaseResultCaps, 32, true, true)
])
makeStructCoders(Resolve, [
(promiseId, 0, 0, true),
(kind, 4, low(ResolveKind), true)
], [
(cap, 0, PointerFlag.none, ResolveKind.cap),
(exception, 0, PointerFlag.none, ResolveKind.exception)
], [])
makeStructCoders(Release, [
(id, 0, 0, true),
(referenceCount, 4, 0, true)
], [], [])
makeStructCoders(Disembargo, [], [
(target, 0, PointerFlag.none, true)
], [])
makeStructCoders(Disembargo_context, [
(kind, 4, low(Disembargo_contextKind), true),
(senderLoopback, 0, 0, Disembargo_contextKind.senderLoopback),
(receiverLoopback, 0, 0, Disembargo_contextKind.receiverLoopback),
(provide, 0, 0, Disembargo_contextKind.provide)
], [], [])
makeStructCoders(Provide, [
(questionId, 0, 0, true)
], [
(target, 0, PointerFlag.none, true),
(recipient, 1, PointerFlag.none, true)
], [])
makeStructCoders(Accept, [
(questionId, 0, 0, true)
], [
(provision, 0, PointerFlag.none, true)
], [
(embargo, 32, false, true)
])
makeStructCoders(Join, [
(questionId, 0, 0, true)
], [
(target, 0, PointerFlag.none, true),
(keyPart, 1, PointerFlag.none, true)
], [])
makeStructCoders(MessageTarget, [
(kind, 4, low(MessageTargetKind), true),
(importedCap, 0, 0, MessageTargetKind.importedCap)
], [
(promisedAnswer, 0, PointerFlag.none, MessageTargetKind.promisedAnswer)
], [])
makeStructCoders(Payload, [], [
(content, 0, PointerFlag.none, true),
(capTable, 1, PointerFlag.none, true)
], [])
makeStructCoders(CapDescriptor, [
(kind, 0, low(CapDescriptorKind), true),
(senderHosted, 4, 0, CapDescriptorKind.senderHosted),
(senderPromise, 4, 0, CapDescriptorKind.senderPromise),
(receiverHosted, 4, 0, CapDescriptorKind.receiverHosted)
], [
(receiverAnswer, 0, PointerFlag.none, CapDescriptorKind.receiverAnswer),
(thirdPartyHosted, 0, PointerFlag.none, CapDescriptorKind.thirdPartyHosted)
], [])
makeStructCoders(PromisedAnswer, [
(questionId, 0, 0, true)
], [
(transform, 0, PointerFlag.none, true)
], [])
makeStructCoders(PromisedAnswer_Op, [
(kind, 0, low(PromisedAnswer_OpKind), true),
(getPointerField, 2, 0, PromisedAnswer_OpKind.getPointerField)
], [], [])
makeStructCoders(ThirdPartyCapDescriptor, [
(vineId, 0, 0, true)
], [
(id, 0, PointerFlag.none, true)
], [])
makeStructCoders(Exception, [
(obsoleteDurability, 2, 0, true),
(`type`, 4, Exception_Type(0), true)
], [
(reason, 0, PointerFlag.text, true)
], [
(obsoleteIsCallersFault, 0, false, true)
])