Skip to main content

DecodeLifecycleOutput

Struct DecodeLifecycleOutput 

Source
pub struct DecodeLifecycleOutput<V> { /* private fields */ }
Expand description

Values produced by decode reset, the main decode, and decode finish.

This result keeps lifecycle output in phase order without allowing finish output to overwrite reset output.

§Type Parameters

  • V: Logical value type produced by the codec.

§Examples

A stateless identity codec produces one lifecycle whose reset and finish phases stay empty:

use core::convert::Infallible;
use core::num::NonZeroUsize;

use qubit_codec::Codec;
use qubit_codec::CodecValueDecoder;
use qubit_codec::DecodeFailure;
use qubit_codec::DecodeLifecycleOutput;

struct Identity;

impl Codec for Identity {
    type Value = u8;
    type Unit = u8;
    type DecodeError = Infallible;
    type EncodeError = Infallible;
    const MIN_UNITS_PER_VALUE: usize = 1;
    const MAX_DECODE_UNITS_PER_VALUE: usize = 1;
    const MAX_ENCODE_UNITS_PER_VALUE: usize = 1;

    unsafe fn decode(&mut self, input: &[u8], index: usize)
        -> Result<(u8, NonZeroUsize), DecodeFailure<Infallible>>
    {
        Ok((input[index], NonZeroUsize::MIN))
    }

    unsafe fn encode(&mut self, value: &u8, output: &mut [u8], index: usize)
        -> Result<usize, Infallible>
    {
        output[index] = *value;
        Ok(1)
    }
}

let output: DecodeLifecycleOutput<u8> =
    CodecValueDecoder::new(Identity).decode_lifecycle(&[7]).unwrap();
assert_eq!(*output.value(), 7);
assert!(output.reset().is_empty());
assert!(output.finish().is_empty());

let (reset, value, finish) = output.into_parts();
assert_eq!(value, 7);
assert!(reset.is_empty() && finish.is_empty());

Implementations§

Source§

impl<V> DecodeLifecycleOutput<V>

Source

pub fn reset(&self) -> &[V]

Returns values emitted while resetting decode state.

§Returns

Returns the reset output in emission order.

Source

pub const fn value(&self) -> &V

Returns the main value decoded from the supplied input.

§Returns

Returns a shared reference to the main decoded value.

Source

pub fn finish(&self) -> &[V]

Returns values emitted while finishing decode state.

§Returns

Returns the finish output in emission order.

Source

pub fn into_parts(self) -> (Vec<V>, V, Vec<V>)

Consumes this result and returns all lifecycle phases.

§Returns

Returns reset values, the main decoded value, and finish values.

Trait Implementations§

Source§

impl<V: Clone> Clone for DecodeLifecycleOutput<V>

Source§

fn clone(&self) -> Self

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<V: Debug> Debug for DecodeLifecycleOutput<V>

Source§

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

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

impl<V: Eq> Eq for DecodeLifecycleOutput<V>

Source§

impl<V: Hash> Hash for DecodeLifecycleOutput<V>

Source§

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

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<V: PartialEq> PartialEq for DecodeLifecycleOutput<V>

Source§

fn eq(&self, other: &Self) -> bool

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

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

Inequality operator !=. Read more
Source§

impl<V: PartialEq> StructuralPartialEq for DecodeLifecycleOutput<V>

Auto Trait Implementations§

§

impl<V> Forget for DecodeLifecycleOutput<V>

§

impl<V> Freeze for DecodeLifecycleOutput<V>
where Vec<V>: Freeze, V: Freeze,

§

impl<V> RefUnwindSafe for DecodeLifecycleOutput<V>

§

impl<V> Send for DecodeLifecycleOutput<V>
where Vec<V>: Send, V: Send,

§

impl<V> Sync for DecodeLifecycleOutput<V>
where Vec<V>: Sync, V: Sync,

§

impl<V> Unpin for DecodeLifecycleOutput<V>
where Vec<V>: Unpin, V: Unpin,

§

impl<V> UnsafeUnpin for DecodeLifecycleOutput<V>
where Vec<V>: UnsafeUnpin, V: UnsafeUnpin,

§

impl<V> UnwindSafe for DecodeLifecycleOutput<V>
where Vec<V>: UnwindSafe, V: UnwindSafe,

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<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, 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.