spinel_pack

Trait TryUnpack

Source
pub trait TryUnpack<'a> {
    type Unpacked: Send + Sized + Debug;

    // Required method
    fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>;

    // Provided methods
    fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked> { ... }
    fn try_unpack_from_slice(slice: &'a [u8]) -> Result<Self::Unpacked> { ... }
}
Expand description

Trait for unpacking a spinel-encoded buffer to a specific type.

Similar to TryOwnedUnpack, except that it can also unpack into borrowed types, like &[u8] and &str.

Required Associated Types§

Source

type Unpacked: Send + Sized + Debug

The type of the unpacked result. This can be the same as Self, but in some cases it can be different. This is because Self is a marker type, and may not even be Sized. For example, if Self is SpinelUint, then Unpacked would be u32 (because SpinelUint is just a marker trait indicating a variably-sized unsigned integer).

Required Methods§

Source

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Attempts to decode the data at the given iterator into an instance of Self.

Provided Methods§

Source

fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Attempts to decode an item from an array at the given iterator into an instance of Self.

Array encoding is occasionally different than single-value encoding, hence the need for a separate method.

Default behavior is the same as try_unpack().

Source

fn try_unpack_from_slice(slice: &'a [u8]) -> Result<Self::Unpacked>

Convenience method for unpacking directly from a borrowed slice.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a> TryUnpack<'a> for &'a str

Source§

type Unpacked = &'a str

Source§

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

impl<'a> TryUnpack<'a> for &'a [u8]

Source§

type Unpacked = &'a [u8]

Source§

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

impl<'a> TryUnpack<'a> for bool

Source§

impl<'a> TryUnpack<'a> for i8

Source§

impl<'a> TryUnpack<'a> for i16

Source§

impl<'a> TryUnpack<'a> for i32

Source§

impl<'a> TryUnpack<'a> for i64

Source§

impl<'a> TryUnpack<'a> for u8

Source§

impl<'a> TryUnpack<'a> for u16

Source§

impl<'a> TryUnpack<'a> for u32

Source§

impl<'a> TryUnpack<'a> for u64

Source§

impl<'a> TryUnpack<'a> for ()

Source§

impl<'a> TryUnpack<'a> for String

Source§

impl<'a> TryUnpack<'a> for Ipv6Addr

Source§

impl<'a, T> TryUnpack<'a> for Vec<T>
where T: TryUnpack<'a>,

Source§

type Unpacked = Vec<<T as TryUnpack<'a>>::Unpacked>

Source§

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

impl<'a, T> TryUnpack<'a> for HashSet<T>
where T: TryUnpack<'a>, T::Unpacked: Eq + Hash,

Source§

type Unpacked = HashSet<<T as TryUnpack<'a>>::Unpacked>

Source§

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

impl<'a, T, const N: usize> TryUnpack<'a> for [T; N]
where T: TryUnpack<'a>,

Source§

type Unpacked = [<T as TryUnpack<'a>>::Unpacked; N]

Source§

fn try_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Source§

fn try_array_unpack(iter: &mut Iter<'a, u8>) -> Result<Self::Unpacked>

Implementors§

Source§

impl<'a> TryUnpack<'a> for &'a EUI48

Borrowed unpack for EUI48

Source§

impl<'a> TryUnpack<'a> for &'a EUI64

Borrowed unpack for EUI64

Source§

impl<'a> TryUnpack<'a> for SpinelUint

Source§

impl<'a> TryUnpack<'a> for EUI48

Source§

impl<'a> TryUnpack<'a> for EUI64