Glaze provides a binary format to send and receive messages like JSON, but with significantly improved performance and message size savings.
The binary specification is known as BEVE.
Write BEVE
my_struct s{};
std::vector<std::byte> buffer{};
glz::write_beve(s, buffer);
Read BEVE
my_struct s{};
glz::read_beve(s, buffer);
Note
As of v3.3.0 reading binary is safe for invalid input and doesn't require null terminated buffers.
By default Glaze will handle structs as tagged objects, meaning that keys will be written/read. However, structs can be written/read without tags by using the option structs_as_arrays
or the functions glz::write_beve_untagged
and glz::read_beve_untagged
.
glaze/binary/beve_to_json.hpp
provides glz::beve_to_json
, which directly converts a buffer of BEVE data to a buffer of JSON data.
It is sometimes desirable to write out only a portion of an object. This is permitted via an array of JSON pointers, which indicate which parts of the object should be written out.
static constexpr auto partial = glz::json_ptrs("/i",
"/d",
"/sub/x",
"/sub/y");
std::vector<std::byte> out;
glz::write_beve<partial>(s, out);