Binary Application Record Encoding C library
| barec | init | |
| include | init | |
| src | init | |
| test | init | |
| .editorconfig | init | |
| LICENSE | init | |
| meson.build | init | |
| README.md | readme: add preamble | |
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!"