Skip to main content

TLVSequence

Struct TLVSequence 

Source
pub struct TLVSequence<'a>(/* private fields */);
Expand description

A newtype for iterating over the TLVElement “child” instances contained in TLVElement which is a TLV container (array, struct or list). (Internally, TLVSequence might be used for other purposes, but the external contract is only the one from above.)

Just like TLVElement, TLVSequence is a newtype over a byte slice - the byte sub-slice of the parent TLVElement container where its value starts.

Unlike TLVElement, TLVSequence - as the name suggests - represents a sequence of 0, 1 or more TLVElements. The only public API of TLVSequence however is the iter method which returns a TLVContainerIter iterator over the TLVElement instances in the sequence.

Implementations§

Source§

impl<'a> TLVSequence<'a>

Source

pub fn iter(&self) -> TLVSequenceIter<'a>

Return an iterator over the TLVElement instances in this TLVSequence.

Source

pub fn tlv_iter(&self) -> TLVSequenceTLVIter<'a>

Return an iterator over the TLV instances in this TLVSequence.

The difference with iter is that for container elements, tlv_iter will return separate TLV instances for the container start, the container elements and the container end, where if an element in the container is itself a container, the algorithm will be applied recursively to the inner container.

Source

pub fn ctx(&self, ctx: u8) -> Result<TLVElement<'a>, Error>

A convenience utility that returns the first TLVElement in the sequence which is tagged with a context tag (TLVTag::Context) where the context ID is matching the ID passed in the ctx parameter.

If there is no TLV element tagged with a context tag with the matching ID, the method will return an error.

Source

pub fn find_ctx(&self, ctx: u8) -> Result<TLVElement<'a>, Error>

A convenience utility that returns the first TLVElement in the sequence which is tagged with a context tag (TLVTag::Context) where the context ID is matching the ID passed in the ctx parameter.

If there is no TLV element tagged with a context tag with the matching ID, the method will return an empty TLVElement.

Source

pub fn scan_ctx(&mut self, ctx: u8) -> Result<TLVElement<'a>, Error>

A convenience utility that returns the first TLVElement in the sequence which is tagged with a context tag (TLVTag::Context) where the context ID is equal to the ID passed in the ctx parameter.

If there is no TLV element tagged with a context tag with the matching ID, the method will return an empty TLV element.

As a side effect of calling this method, the TLVSequence instance will be updated to point to the next element after the found element, or if an element with the provided context ID does not exist, to the first element with a bigger context ID than the one we are looking for.

Source

pub fn scan_map<F, T>(&mut self, f: F) -> Result<T, Error>
where F: FnMut(TLVElement<'a>) -> Result<Option<T>, Error>,

A convenience utility that returns scans the elements in the sequence, in-order and stops scanning once the provided mapping closure f returns a non-empty result.

As a side effect of calling this method, the TLVSequence instance will be updated to point to the next element after the one on which the provided closure returned a non-empty result.

Note that the closure must ultimately return a non-empty result - if for nothing else then for the empty element that is passed to it when the sequence is exhausted, or else the method would loop forever.

Source

pub fn raw_value(&self) -> Result<&'a [u8], Error>

Return a raw byte sub-slice representing the TLV-encoded elements and only those elements that belong to the TLV container whose elements are represented by this TLVSequence instance.

This method is necessary, because both TLVElement instances, as well as TLVSequence instances - for optimization purposes - might be constructed during iteration on slices which are technically longer than the actual TLV-encoded data they represent.

So in case the user is need of the actual, exact raw representation of a TLV container value, this method is provided.

Trait Implementations§

Source§

impl<'a> Clone for TLVSequence<'a>

Source§

fn clone(&self) -> TLVSequence<'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 Debug for TLVSequence<'_>

Source§

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

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

impl Display for TLVSequence<'_>

Source§

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

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

impl<'a> Eq for TLVSequence<'a>

Source§

impl<'a> Hash for TLVSequence<'a>

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a> PartialEq for TLVSequence<'a>

Source§

fn eq(&self, other: &TLVSequence<'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 TLVSequence<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for TLVSequence<'a>

§

impl<'a> RefUnwindSafe for TLVSequence<'a>

§

impl<'a> Send for TLVSequence<'a>

§

impl<'a> Sync for TLVSequence<'a>

§

impl<'a> Unpin for TLVSequence<'a>

§

impl<'a> UnsafeUnpin for TLVSequence<'a>

§

impl<'a> UnwindSafe for TLVSequence<'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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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