Expand description
Matter TLV (Tag-Length-Value) encoding and decoding.
§Scope
The whole of Matter Core Specification §A.2: all scalar element types,
UTF-8 and octet strings, every tag form (anonymous, context, common
profile, implicit profile, fully-qualified), and containers (structure,
array, list) with a 32-level depth limit. TlvWriter always picks the
narrowest legal encoding for a tag or a length.
TlvReader can be driven three ways: element-at-a-time with
next, zero-copy with
next_ref (yielding ElementRef /
ValueRef, which borrow strings and octet strings straight out of the
input), or as a whole tree with read_value.
Containers you do not care about can be skipped outright — see
skip_container, or
skip_container_span when you want the
raw bytes back to forward verbatim.
Verified by spec test vectors, a proptest round-trip property, and a
cargo-fuzz target.
§Usage
use matter_codec::{Tag, TlvWriter};
let mut bytes = Vec::new();
let mut writer = TlvWriter::new(&mut bytes);
writer.put_bool(Tag::Anonymous, true)?;
assert_eq!(bytes, [0x09]);Re-exports§
pub use error::Error;pub use error::Result;pub use reader::ContainerKind;pub use reader::Element;pub use reader::ElementRef;pub use reader::ElementSpan;pub use reader::TlvReader;pub use reader::MAX_DEPTH;pub use tag::Tag;pub use value::Value;pub use value::ValueRef;pub use writer::TlvWriter;