1
0
Fork
You've already forked libbare
0
Binary Application Record Encoding C library
  • C 97%
  • Meson 3%
Find a file
2026年07月08日 21:00:35 +03:00
barec init 2026年06月30日 11:00:13 +03:00
include init 2026年06月30日 11:00:13 +03:00
src init 2026年06月30日 11:00:13 +03:00
test init 2026年06月30日 11:00:13 +03:00
.editorconfig init 2026年06月30日 11:00:13 +03:00
LICENSE init 2026年06月30日 11:00:13 +03:00
meson.build init 2026年06月30日 11:00:13 +03:00
README.md readme: add preamble 2026年07月08日 21:00:35 +03:00

libbare

Binary Application Record Encoding C library & codegen tool

Preamble

This library implements BARE message encoding

Current implemented version: draft-devault-bare-15

Examples

Stream

#include <bare/reader.h>
int main(void)
{
	unsigned char msg[] = {
		0x04, 0x42, 0x41, 0x52, 0x45, // BARE
	};
	struct buffer read_ctx = {
		.data = msg,
		.pos = 0,
		.capacity = sizeof(msg),
	};
	struct bare_reader r = {
		.userdata = &read_ctx,
		.read = buffer_read,
	};
	char *str;
	if (bare_decode_str(&r, &str) < 0) {
		// fail
	}
	puts(str);
	free(str);
}

Codegen

schema.bare

type Eblan struct {
	name: str
	region: str
	is_chuhan: bool
	detention_count: u64
}

main.c

#include "bare_generated.h"
int main(void)
{
	struct Eblan somebody = {
		.name.value = "Noname",
		.region.value = "XX",
		.is_chuhan = true,
		.detention_count = 3,
	};
	unsigned char buf[1024];
	struct buffer write_ctx = {
		.data = buf,
		.pos = 0,
		.capacity = sizeof(buf),
	};
	struct bare_writer w = {
		.userdata = &write_ctx,
		.write = buffer_write,
	};
	if (Eblan_encode(&w, &somebody) < 0) {
		// fail
	}
	send(fd, buf, write_ctx.pos, 0);
}
barec < schema.bare
find bare_generated.h bare_generated.c && echo "codegen works!"
cc -lbare bare_generated.c main.c -o bare_example
./bare_example && echo "you made it!"