Skip to main content

TLV

Struct TLV 

Source
pub struct TLV<'a> {
    pub tag: TLVTag,
    pub value: TLVValue<'a>,
}
Expand description

A high-level representation of a TLV tag + value.

Amongsat other things, it is a convenient way to emit TLV byte sequences.

A TLV can be constructed programmatically, or returned from a TLVElement.

Unlike a TLVElement however, a TLV does not represent a complete container, but rather, its beginning or end.

I.e.

use rs_matter::tlv::{TLV, TLVTag, TLVValue};

let tlvs = &[
    TLV::new(TLVTag::Anonymous, TLVValue::Struct),
    TLV::new(TLVTag::Context(0), TLVValue::Utf8l("Hello, World!")),
    TLV::new(TLVTag::Anonymous, TLVValue::EndCnt),
];

let bytes_iter = tlvs.iter().flat_map(|tlv| tlv.bytes_iter());
for byte in bytes_iter {
   println!("{:02X}", byte);
}

Fields§

§tag: TLVTag§value: TLVValue<'a>

Implementations§

Source§

impl<'a> TLV<'a>

Source

pub const fn new(tag: TLVTag, value: TLVValue<'a>) -> TLV<'a>

Create a new TLV instance with the provided tag and value.

Source

pub const fn i8(tag: TLVTag, value: i8) -> TLV<'a>

Create a TLV with the given tag and the provided value as an S8 TLV.

Source

pub const fn i16(tag: TLVTag, value: i16) -> TLV<'a>

Create a TLV with the given tag and the provided value as an S8 or S16 TLV, depending on whether the value is small enough to fit in an S8 TLV.

Source

pub const fn i32(tag: TLVTag, value: i32) -> TLV<'a>

Create a TLV with the given tag and the provided value as an S8, S16, or S32 TLV, depending on whether the value is small enough to fit in an S8 or S16 TLV.

Source

pub const fn i64(tag: TLVTag, value: i64) -> TLV<'a>

Create a TLV with the given tag and the provided value as an S8, S16, S32, or S64 TLV, depending on whether the value is small enough to fit in an S8, S16, or S32 TLV.

Source

pub const fn u8(tag: TLVTag, value: u8) -> TLV<'a>

Create a TLV with the given tag and the provided value as a U8 TLV.

Source

pub const fn u16(tag: TLVTag, value: u16) -> TLV<'a>

Create a TLV with the given tag and the provided value as a U8 or U16 TLV, depending on whether the value is small enough to fit in a U8 TLV.

Source

pub const fn u32(tag: TLVTag, value: u32) -> TLV<'a>

Create a TLV with the given tag and the provided value as a U8, U16, or U32 TLV, depending on whether the value is small enough to fit in a U8 or U16 TLV.

Source

pub const fn u64(tag: TLVTag, value: u64) -> TLV<'a>

Create a TLV with the given tag and the provided value as a U8, U16, U32, or U64 TLV, depending on whether the value is small enough to fit in a U8, U16, or U32 TLV.

Source

pub const fn f32(tag: TLVTag, value: f32) -> TLV<'a>

Create a TLV with the given tag and the provided value as a F32 TLV.

Source

pub const fn f64(tag: TLVTag, value: f64) -> TLV<'a>

Create a TLV with the given tag and the provided value as a F64 TLV.

Source

pub const fn utf8(tag: TLVTag, value: &'a str) -> TLV<'a>

Create a TLV with the given tag and the provided value as a UTF-8 TLV. The length of the string is encoded as 1, 2, 4 or 8 octets, depending on the length of the string.

Source

pub const fn str(tag: TLVTag, value: &'a [u8]) -> TLV<'a>

Create a TLV with the given tag and the provided value as an octet string TLV. The length of the string is encoded as 1, 2, 4 or 8 octets, depending on the length of the string.

Source

pub const fn struct(tag: TLVTag) -> TLV<'a>

Create a TLV with the given tag which will have a value of type Struct (start).

Source

pub const fn structure(tag: TLVTag) -> TLV<'a>

Create a TLV with the given tag which will have a value of type Struct (start).

Source

pub const fn array(tag: TLVTag) -> TLV<'a>

Create a TLV with the given tag which will have a value of type Array (start).

Source

pub const fn list(tag: TLVTag) -> TLV<'a>

Create a TLV with the given tag which will have a value of type List (start).

Source

pub const fn end_container() -> TLV<'a>

Create a TLV with the given tag which will have a value of type EndCnt (container end).

Source

pub const fn null(tag: TLVTag) -> TLV<'a>

Create a TLV with the given tag which will have a value of type Null.

Source

pub const fn bool(tag: TLVTag, value: bool) -> TLV<'a>

Create a TLV with the given tag which will have a value of type True.

Source

pub fn into_tlv_iter(self) -> Once<Result<TLV<'a>, Error>>

Converts the TLV into an iterator with a single item - the TLV.

Source

pub fn bytes_iter(&self) -> TLVBytesIter<'a, &TLVTag, &TLVValue<'a>>

Returns an iterator over the bytes of the TLV.

Source

pub fn into_bytes_iter(self) -> TLVBytesIter<'a, TLVTag, TLVValue<'a>>

Converts the TLV into an iterator over its bytes.

Source

pub fn result_into_bytes_iter( result: Result<TLV<'a>, Error>, ) -> TLVResultBytesIter<'a, TLVTag, TLVValue<'a>>

Converts the provided result into an iterator over the bytes of the TLV.

Trait Implementations§

Source§

impl<'a> Clone for TLV<'a>

Source§

fn clone(&self) -> TLV<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for TLV<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'a> IntoIterator for TLV<'a>

Source§

type Item = u8

The type of the elements being iterated over.
Source§

type IntoIter = TLVBytesIter<'a, TLVTag, TLVValue<'a>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <TLV<'a> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'s, 'a> IntoIterator for &'s TLV<'a>

Source§

type Item = u8

The type of the elements being iterated over.
Source§

type IntoIter = TLVBytesIter<'a, &'s TLVTag, &'s TLVValue<'a>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'s TLV<'a> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'a> PartialEq for TLV<'a>

Source§

fn eq(&self, other: &TLV<'a>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for TLV<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for TLV<'a>

§

impl<'a> RefUnwindSafe for TLV<'a>

§

impl<'a> Send for TLV<'a>

§

impl<'a> Sync for TLV<'a>

§

impl<'a> Unpin for TLV<'a>

§

impl<'a> UnsafeUnpin for TLV<'a>

§

impl<'a> UnwindSafe for TLV<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, E> Init<T, E> for T

Source§

unsafe fn __init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn chain<F>(self, f: F) -> ChainInit<Self, F, T, E>
where F: FnOnce(&mut T) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, I> IntoFallibleInit<T> for I
where I: Init<T>,

Source§

fn into_fallible<E>(self) -> impl Init<T, E>

Convert the infallible initializer to a fallible one.
Source§

impl<Source, Target> OctetsInto<Target> for Source
where Target: OctetsFrom<Source>,

Source§

type Error = <Target as OctetsFrom<Source>>::Error

Source§

fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
Source§

fn octets_into(self) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
Source§

impl<T, E> PinInit<T, E> for T

Source§

unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E>

Initializes slot. Read more
Source§

fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>
where F: FnOnce(Pin<&mut T>) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V