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