Files
lua/doc/document.md
zeekay 91103511be Finish capnp->ZAP rebrand; vendor lunitx; decouple cjson; bump rockspec
Rename the Cap'n Proto Lua port to ZAP, brand-neutral throughout:
- capnp.lua -> zap.lua, capnp/ -> zap/, *.capnp -> *.zap, compiler bins
  capnpc-* -> zapc-*, schema/handwritten modules -> *_zap.lua. Zero
  capnp/Cap'n Proto leftovers in zap-native source/build (upstream-fork
  Kenton Varda copyright headers in proto/c++.zap and bin/schema.zap stay).
  Generated-code header and doc links point at github.com/zap-proto/lua and
  zap-proto.io.

Tests now run with no extra install:
- Vendor the lunitx test framework (Michael Roth / Doug Currie, MIT) under
  vendor/ (lunit, lunit.console, lunitx, lunitx.atexit). Its __gc atexit hook
  drives each test file under LuaJIT and exits nonzero on any failure.
- tests/run_tests.sh and test.sh are self-contained (set LUA_PATH incl
  vendor/), generate proto/example_zap.lua via the `zap` compiler when present,
  and skip 01/10 with a clear note (never a false pass) when it is absent.
  02-util and 03-compile are pure-Lua and always run.
- Verified under LuaJIT 2.1: 01(20) + 02(7) + 03(1) + 10(31) = 59 tests pass,
  0 failed; runner returns nonzero on an injected failure.

Decouple optional cjson so the runtime/compiler load under a bare LuaJIT:
- zap/compile.lua loads cjson lazily and only for debug logging (guarded by
  the debug flag); bin/zapc-llua makes the schema JSON dump optional.

Rockspec: bump lua-zap to 0.1.3-4, declare lua-cjson >= 2.1.0, and install the
vendored lunitx modules. .gitignore: scope the rockspec-pack ignore to repo
root so rockspec/ specs are tracked; ignore the `dump` test artifact.

TODO trimmed to the genuinely remaining items (AnyPointer set/decode, packed
serialization, schema_zap regeneration, multi-file compile, perf).
2026-06-20 00:12:16 -07:00

2.1 KiB

lua-zap

Code structure

├── bin         ZAP compiler's plug-ins and ZAP schema file
├── zap       lua-zap library file (including compiler)
├── cpp         cpp files used for testing lua-zap
├── example     examples for how to use lua-zap
├── lua         other lua files
├── proto       all protos
└── tests       test files

Debugging

Set environment variable VERBOSE to 1 enables debug mode. Compiler will generate more debug info and the following files:

  • test.schema.lua This is the schema passed from ZAP compiler to lua plug-in. ZAP text presentation has been translated to lua file.
  • lua.schema.json Schema that lua-zap compiler used

Compiling proto files

All proto files including imported proto files should be compiled together. Output file will use first input proto file's name plus a "_zap.lua" suffix. For example:

zap compile -olua message.zap constants.zap

Output file will be message_zap.lua

When developing, you may need to run the following command. This specifies which zapc-lua to use.

VERBOSE=1 zap compile -o ../bin/zapc-lua example.zap enums.zap lua.zap struct.zap

How to add a new naming function

  • add a new naming function in zap/util.lua
  • add a test case in tests/02-util.lua
  • test new naming function by make test
  • add your naming function to "naming_funcs" table in "zap/compile.lua" using this kind of format: name = function. 'name' is what you will write in ZAP file using "$Lua.naming" annotation. 'function' is you actual naming function
  • add a new enum in proto/enums.zap.
  • add a test case in tests/11-handwritten.lua (see test_lower_space_naming)
  • update lua/handwritten_zap.lua using vimdiff lua/handwritten_zap.lua proto/example_zap.lua

Generated code

calc_size - calculate size need for serialization using given input data, header size included calc_size_struct - calculate size need for serialization using given input data, header size not included