14 stable releases
2.13.2 | Oct 15, 2024 |
---|---|
2.13.1 | Sep 14, 2024 |
2.13.0 | Mar 28, 2024 |
2.11.1 | Jan 31, 2024 |
2.9.2 | Sep 30, 2023 |
#2255 in Encoding
1,833 downloads per month
Used in 3 crates
(via sval_derive)
325KB
9K
SLoC
sval_flatten
Flatten nested sval::Value
s onto their parent.
lib.rs
:
Flatten nested values when streaming.
This library is like the standard library's Iterator::flatten
method, but for sval::Stream
s.
Given a value, it will flatten its nested values onto a parent structure. It supports flattening
any combination of map, sequence, record, or tuple onto any other.
If you're using sval_derive
, you can use the #[flatten]
attribute on a field.
Specifics
Flattening unwraps containers and translates their values into the form needed by their parent. The following types can be flattened:
- maps
- sequences
- records
- tuples
Any other type, including primitives like tags, booleans, and text will be ignored if flattened.
Maps
- maps: keys are passed through directly, even if they're complex values like other maps.
- sequences: keys are the stringified offset of sequence values.
- records: keys are the label of record values.
- tuples: keys are the stringified index of tuple values.
Sequences
- maps: map keys are ignored; only map values are flattened.
- sequences: sequence values are passed through directly.
- records: record values are passed through directly.
- tuples: tuple values are passed through directly.
Records
- maps: map keys are stringified into labels. For complex values like other maps each nested value is stringified and concatenated together.
- sequences: labels are the stringified offset of sequence values.
- records: labels are passed through directly.
- tuples: labels are the stringified index of tuple values.
Tuples
- maps: map keys are ignored; only map values are flattened.
- sequences: indexes are the offset of sequence values.
- records: indexes are the offset of record values.
- tuples: tuple values are passed through directly.
Dependencies
~90KB