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.
1.7 KiB
zap.nim
Docs: ZAP Nim SDK · part of the ZAP Protocol
ZAP bindings for Nim
WARNING: the project is not actively maintained
zap.nim is a Nim implementation of ZAP serialization scheme and RPC protocol.
The serialization layer is production ready. The RPC layers is also fairly well tested, enough to be useful, but not the whole protocol is implemented.
The main user of this library is MetaContainer.
Installing
Use nimble to install zap.nim:
nimble install zap
Create symlink to zapc binary result (zap compiler expects zapc-nim binary,
but Nimble is unable to produce binary name that contains -):
ln -s ~/.nimble/bin/zapc ~/.nimble/bin/zapc-nim
Generating wrapping code
zap.nim can generate Nim types (with some metadata) from .zap file. The resulting objects use native Nim datatypes like seq or strings (this means that this implementation, unlike C++ one, doesn't have O(1) deserialization time).
zap compile -onim your-protocol-file.zap > you-output-file.nim
Using the library
import persondef, zap
# unpack the raw serialized data
let p: Person = newUnpackerFlat(packed).unpackStruct(0, Person)
# and pack again
let packed2 = packStruct(p)
Debugging options
Define the following symbols during compilation (e.g -d:caprpcTraceMessages):
caprpcTraceMessages- print all messages sent by RPC systemcaprpcTraceLifetime- print info aboutreleasemessages, useful while debugging cross-machine leakscaprpcPrintExceptions- print exceptions raised inside called methods (server)