~alva/zig-bare

BARE Message Encoding implementation in Zig
keep up with zig
keep up with zig
keep up with zig build system

clone

read-only
https://git.sr.ht/~alva/zig-bare
read/write
git@git.sr.ht:~alva/zig-bare

You can also use your local clone with git send-email.

#zig-bare

BARE Message Encoding implementation in Zig.

builds.sr.ht status

#Building

The trunk branch is tested against Zig master branch on build.

# Use -Doptimize=Release{Fast, Safe, Small} for release build.
zig build

# Run tests.
zig build test

#Usage

Use the Zig build system to add the "bare" module to your project.

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 = .{ .y = "hello" },
};

test "example" {
    var buf: [12]u8 = undefined;
    var fbs = io.fixedBufferStream(&buf);

    const reader = fbs.reader();
    const writer = fbs.writer();

    var e = encoder(writer);
    try e.encode(x);

    try fbs.seekTo(0);

    var d = decoder(std.testing.allocator, reader);
    defer d.deinit();

    const y = try d.decode(Bar);

    std.log.info("x: {}", .{x});
    std.log.info("y: {}", .{y});
}

Hash maps and slices require allocation; call deinit on a Decoder to free any memory that was allocated.

#BARE conformance

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.

usize and c_uint are encoded as variable-length unsigned integers, and isize and c_int are encoded as variable-length signed integers.

For map[type A]type B, std.HashMap is used.

When using Encoder, all BARE invariants are enforced at compile-time.

#Interoperability

There are tests ported from go-bare in an attempt to ensure interoperability. Please report any interoperability issues you find.

If you can port relevant test cases, that would also be very welcome. :)

#Code generation

There is no schema parser or code generation.

I don't need it myself, but I would gladly accept contributions.

#Contributing

Send patches and questions to ~alva/zig-bare@lists.sr.ht.