mirror of
https://github.com/zap-proto/lua.git
synced 2026-10-30 15:04:38 +00:00
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).
47 lines
1.1 KiB
Lua
47 lines
1.1 KiB
Lua
local addressBook = require "AddressBook_zap"
|
|
local zap = require "zap"
|
|
local cjson = require "cjson"
|
|
local util = require "zap.util"
|
|
|
|
local data = {
|
|
people = {
|
|
{
|
|
id = 123,
|
|
name = "Alice",
|
|
email = "[email protected]",
|
|
phones = {
|
|
{
|
|
number = "555-1212",
|
|
["type"] = "MOBILE",
|
|
},
|
|
},
|
|
employment = {
|
|
school = "MIT",
|
|
},
|
|
},
|
|
{
|
|
id = 456,
|
|
name = "Bob",
|
|
email = "[email protected]",
|
|
phones = {
|
|
{
|
|
number = "555-4567",
|
|
["type"] = "HOME",
|
|
},
|
|
{
|
|
number = "555-7654",
|
|
["type"] = "WORK",
|
|
},
|
|
},
|
|
employment = {
|
|
unemployed = "Void",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
local bin = addressBook.AddressBook.serialize(data)
|
|
local decoded = addressBook.AddressBook.parse(bin)
|
|
|
|
print(cjson.encode(decoded))
|