Update readme
Use latest "stable" Zig for CI on trunk branch
Test on Zig 0.9.0
BARE Message Encoding implementation in Zig.
The trunk
branch is tested on latest stable Zig,
and the self-hosted
branch is tested with the self-hosted compiler
(use -fno-stage1
to build).
# Use -Drelease-{fast, safe, small} for release build.
zig build
# Run tests.
zig build test
Declare your types as usual, then use Encoder
to encode them,
and Decoder
to decode them:
const Foo = union(enum) {
x: u64,
y: []const u8,
z: void,
};
const Bar = struct {
a: f32,
b: u8,
c: Foo,
};
const x = Bar{
.a = 3.14,
.b = 2,
.c = Foo{ .y = "hello" },
};
var buf: [12]u8 = undefined;
var fbs = io.fixedBufferStream(&buf);
try Encoder.init().encode(x, fbs.writer());
try fbs.seekTo(0);
var d = Decoder.init(allocator);
defer d.deinit();
const y = try d.decode(Bar, fbs.reader());
warn("x: {}\ny: {}\n", .{ x, y });
Hash maps and slices require allocation;
call deinit
on a Decoder
to free any memory that was allocated.
All BARE types are supported, although data<length>
and data
are the same
as [length]u8
and []u8
, and string
is also the same as []u8
.
For map[type A]type B
, std.HashMap
is used.
When using Encoder
, all BARE invariants are enforced at compile-time.
There is no schema parser or code generation.
I don't need it myself, but I would gladly accept contributions.
Send patches and questions to ~alva/zig-bare@lists.sr.ht.