60 releases (29 stable)
2.13.2 | Oct 15, 2024 |
---|---|
2.13.0 | Mar 28, 2024 |
2.10.2 | Oct 19, 2023 |
2.6.1 | Jun 27, 2023 |
0.0.4 | Dec 6, 2018 |
#134 in Encoding
677,402 downloads per month
Used in 25 crates
(18 directly)
120KB
3K
SLoC
sval
: Streaming, structured values
sval
is a lightweight serialization-only framework that treats values like a flat stream of tokens.
It's well suited to self-describing text formats like JSON.
How is this different from serde
?
serde
is the de-facto serialization framework for Rust and is well suited to the majority of
use cases. sval
is like a light blend of serde::ser
and serde::de
that is smaller in scope.
It makes a few key different design decisions than serde
that make it effective for working with
self-describing formats:
- The API is flat rather than using recursion to stream nested datastructures.
- All values with dynamic sizes, including text strings, can be streamed in multiple calls.
- Borrowing is an optional optimization.
- The core data model is small, with tags for extensibility.
Data-model
- Values:
null
: the absence of any other meaningful value.- Booleans:
true
andfalse
. - Text strings: stream of UTF8-encoded bytes.
- Binary strings: stream of arbtirary bytes.
- Numbers:
- Integers:
u8
-u128
,i8
-i128
. - Binary floating point:
f32
-f64
.
- Integers:
- Maps: heterogeneous collection of key-value pairs.
- Sequences: heterogeneous collection of values.
- Tags: out-of-band type hints.
- Tagged values: a tag associated with a value.
- Records: tagged maps where keys are well-known labels.
- Tuples: tagged sequences.
- Enums: tagged variants, where variants are enums, tags, tagged values, records, or tuples.
sval
includes built-in tags that extend its data-model with some common datatypes:
- Rust primitives:
()
.Option<T>
.
- Arbitrary-precision decimal floating point numbers.
Other built-in tags may be added in the future. Libraries may also define their own tags.
Current status
This project has a complete and stable API, but isn't well documented yet.
Dependencies
~100KB