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>
impl<V> DecodeLifecycleOutput<V>
Sourcepub fn reset(&self) -> &[V]
pub fn reset(&self) -> &[V]
Returns values emitted while resetting decode state.
§Returns
Returns the reset output in emission order.
Sourcepub const fn value(&self) -> &V
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.
Sourcepub fn finish(&self) -> &[V]
pub fn finish(&self) -> &[V]
Returns values emitted while finishing decode state.
§Returns
Returns the finish output in emission order.
Sourcepub fn into_parts(self) -> (Vec<V>, V, Vec<V>)
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>
impl<V: Clone> Clone for DecodeLifecycleOutput<V>
Source§impl<V: Debug> Debug for DecodeLifecycleOutput<V>
impl<V: Debug> Debug for DecodeLifecycleOutput<V>
impl<V: Eq> Eq for DecodeLifecycleOutput<V>
Source§impl<V: Hash> Hash for DecodeLifecycleOutput<V>
impl<V: Hash> Hash for DecodeLifecycleOutput<V>
Source§impl<V: PartialEq> PartialEq for DecodeLifecycleOutput<V>
impl<V: PartialEq> PartialEq for DecodeLifecycleOutput<V>
impl<V: PartialEq> StructuralPartialEq for DecodeLifecycleOutput<V>
Auto Trait Implementations§
impl<V> Forget for DecodeLifecycleOutput<V>
impl<V> Freeze for DecodeLifecycleOutput<V>
impl<V> RefUnwindSafe for DecodeLifecycleOutput<V>
impl<V> Send for DecodeLifecycleOutput<V>
impl<V> Sync for DecodeLifecycleOutput<V>
impl<V> Unpin for DecodeLifecycleOutput<V>
impl<V> UnsafeUnpin for DecodeLifecycleOutput<V>
impl<V> UnwindSafe for DecodeLifecycleOutput<V>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more