23 releases (10 breaking)
Uses new Rust 2024
| new 0.46.0 | Apr 15, 2026 |
|---|---|
| 0.44.5 | Mar 16, 2026 |
| 0.41.0 | Dec 31, 2025 |
#716 in Encoding
2,031 downloads per month
Used in 64 crates
(14 directly)
745KB
16K
SLoC
facet-value
facet-value provides a memory-efficient dynamic value type for representing
structured data similar to JSON, but with added support for binary data and datetime.
Features
- Pointer-sized
Valuetype: The mainValuetype is exactly one pointer in size - Eight value types: Null, Bool, Number, String, Bytes, Array, Object, DateTime
no_stdcompatible: Works with justalloc, no standard library required- Bytes support: First-class support for binary data (useful for MessagePack, CBOR, etc.)
- DateTime support: First-class support for temporal data (useful for TOML, YAML, etc.)
Design
Value uses a tagged pointer representation with 8-byte alignment, giving us 3 tag bits
to distinguish between value types. Inline values (null, true, false) don’t require
heap allocation.
facet-value
A memory-efficient dynamic value type for representing structured data, with support for bytes.
Features
- Pointer-sized:
Valueis exactly one pointer in size using tagged pointers - Rich type support: Null, Bool, Number, String, Bytes, Array, Object, DateTime
- Typed extraction: Convert from
Valueinto any type implementingFacet - Companion serializer: Use
facet-formatto serialize typed values intoValue
Example
use facet::Facet;
use facet_value::{Value, from_value};
use facet_format::to_value;
#[derive(Debug, Facet, PartialEq)]
struct Person {
name: String,
age: u32,
}
// Convert a typed value to a dynamic Value
let person = Person { name: "Alice".into(), age: 30 };
let value: Value = to_value(&person).unwrap();
// Inspect the value dynamically
let obj = value.as_object().unwrap();
assert_eq!(obj.get("name").unwrap().as_string().unwrap().as_str(), "Alice");
// Convert back to a typed value
let person2: Person = from_value(value).unwrap();
assert_eq!(person, person2);
Sponsors
Thanks to all individual sponsors:
...along with corporate sponsors:
...without whom this work could not exist.
Special thanks
The facet logo was drawn by Misiasart.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Dependencies
~3MB
~56K SLoC