| Crates.io | fexbluffers |
| lib.rs | fexbluffers |
| version | 0.1.1 |
| created_at | 2025-07-15 22:12:07.689341+00 |
| updated_at | 2025-07-16 05:29:56.195909+00 |
| description | Allocation optimized FlexBuffer implementation (Rust). |
| homepage | https://google.github.io/flatbuffers/flexbuffers |
| repository | https://codeberg.org/swatters/fexbluffers |
| max_upload_size | |
| id | 1754174 |
| size | 167,068 |
Allocation optimized FlexBuffer implementation (Rust).
Slower for struct serialization/deserialization -- faster for some kinds of vector building.
// use flexbuffers;
use fexbluffers;
use stats_alloc::{INSTRUMENTED_SYSTEM, Region, StatsAlloc};
use std::alloc::System;
#[global_allocator]
static GLOBAL: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;
fn main() {
let reg = Region::new(&GLOBAL);
// let mut builder = flexbuffers::Builder::default();
let mut builder = fexbluffers::Builder::default();
let mut test_vec = builder.start_vector();
test_vec.push("hello!");
test_vec.push(123);
test_vec.push(());
test_vec.push("something else!");
test_vec.push(10_000);
test_vec.end_vector();
builder.view();
println!("stats: {:#?}", reg.change());
}
// This crate (OMM):
// stats: Stats {
// allocations: 1,
// deallocations: 0,
// reallocations: 3,
// bytes_allocated: 64,
// bytes_deallocated: 0,
// bytes_reallocated: 56,
// }
// time: [195.81 ns 197.43 ns 199.05 ns]
// Official FlexBuffers crate (OMM):
// Stats {
// allocations: 2,
// deallocations: 0,
// reallocations: 4,
// bytes_allocated: 192,
// bytes_deallocated: 0,
// bytes_reallocated: 120,
// }
// time: [266.06 ns 267.28 ns 268.46 ns]
forked from google's implementation https://github.com/google/flatbuffers/tree/c7b9dc83f58fe72162b076ba9c88d682f5d0eda6/rust/flexbuffers#readme
Flexbuffers is a schema-less binary format developed at Google. FlexBuffers can be accessed without parsing, copying, or allocation. This is a huge win for efficiency, memory friendly-ness, and allows for unique use cases such as mmap-ing large amounts of free-form data.
FlexBuffers' design and implementation allows for a very compact encoding, with automatic sizing of containers to their smallest possible representation (8/16/32/64 bits). Many values and offsets can be encoded in just 8 bits.
FlexBuffers supports Serde for automatically serializing Rust data structures into its binary format.
Flexbuffers is the schema-less cousin of Flatbuffers.