Install#
jpm#
$ jpm install https://github.com/HaoZeke/capnp-janet.git
# after it is listed on janet-lang/pkgs:
$ jpm install capnp
Then (import capnp). Needs a system Janet with jpm and a C11 compiler.
bundle (Janet 1.36+)#
Same project.janet, via bundle/init.janet and spork/declare-cc.
$ janet --install .
pixi#
$ pixi install
$ pixi run configure
$ pixi run build
$ pixi run test
Bare Meson#
$ meson setup build
$ meson compile -C build
$ meson test -C build
Optional Janet module: configure with a janet pkg-config package
visible, or -Djanet=enabled.
C embed#
#include <capnp-janet/capnp_message.h>
capnp_message_t msg;
capnp_message_view_flat(&msg, bytes, len);
capnp_ptr_t root;
capnp_root(&msg, &root);
const char *s; size_t n;
capnp_get_text(&root, /*ptr*/0, &s, &n);
Link libcapnp_janet (pkg-config: capnp-janet).
Janet#
(import capnp)
(def builder (capnp/new-builder))
(def body (capnp/init-root builder 1 1))
(capnp/set-u32 body 0 42)
(capnp/set-text body 0 "hello")
(def buf (capnp/finish-builder builder))
(def root (capnp/root (capnp/message-from-buffer buf)))
(print (capnp/get-u32 root 0)) # 42
(print (capnp/get-text root 0)) # hello
Lists come from a decoded message, such as the shipped capnp encode golden:
(def people (capnp/getp
(capnp/root (capnp/message-from-buffer
(slurp "test/fixtures/addressbook_alice_bob.bin")))
0))
(print (length people)) # 2
(print (:text (in people 0) 0)) # Alice
Embedders that amalgamate Janet call capnp_janet_register(env) after
janet_init (see src/janet_mod.c).
Goldens#
Regenerate fixtures (needs system capnp):
$ ./scripts/gen-sample-fixtures.sh