Skip to main content

DecodeFailure

Enum DecodeFailure 

Source
pub enum DecodeFailure<E> {
#[non_exhaustive]
Incomplete { source: Option<E>, required_total: NonZeroUsize, },
#[non_exhaustive]
Invalid { source: E, consumed: Option<NonZeroUsize>, }, }
Expand description

Failure reported by crate::Codec::decode.

This type separates stream-control failures from codec-domain failures. Incomplete tells buffered adapters to preserve the current input tail and request more units. Invalid carries the codec-specific malformed, non-canonical, or otherwise invalid input error with a known non-zero consumption length, or with unknown consumption when set to None.

§Type Parameters

  • E: Codec-specific invalid-input error type.

§Examples

use core::num::NonZeroUsize;

use qubit_codec::DecodeFailure;

let failure = DecodeFailure::<()>::incomplete(NonZeroUsize::MIN);
assert_eq!(failure.required_total(), Some(NonZeroUsize::MIN));
assert_eq!(failure.invalid_source(), None);

Variants§

§

#[non_exhaustive]
Incomplete

The visible input is a valid prefix but not enough to decode a value.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§source: Option<E>

Codec-specific context for the incomplete prefix, when available.

Stream drivers may ignore this field while retrying input. Once the stream reaches EOF, adapters can use it to preserve detailed diagnostics instead of reconstructing an error from the length bound alone.

§required_total: NonZeroUsize

Current non-zero minimum total units required before retrying from the value start.

A later retry may raise this lower bound after the codec sees a longer prefix.

When returned by Codec::decode or Codec::decode_eof, this must be greater than the number of units currently available from the value start and no greater than Codec::MAX_DECODE_UNITS_PER_VALUE. It is a minimum total length from that start, not an additional-unit count; for example, with two units available and at least one more needed, report three.

§

#[non_exhaustive]
Invalid

The input is invalid for the codec.

Fields

This variant is marked as non-exhaustive
Non-exhaustive enum variants could have additional fields added in future. Therefore, non-exhaustive enum variants cannot be constructed in external crates and cannot be matched against.
§source: E

Codec-specific invalid-input error.

§consumed: Option<NonZeroUsize>

Invalid units that may be consumed by a non-strict policy, when known.

Implementations§

Source§

impl<E> DecodeFailure<E>

Source

pub const fn incomplete(required_total: NonZeroUsize) -> Self

Creates an incomplete-input decode failure.

§Parameters
  • required_total: Current non-zero minimum total units required before retrying from the value start. A later retry may raise this lower bound. When returned by Codec::decode or Codec::decode_eof, it must be greater than the units currently available from that start and no greater than Codec::MAX_DECODE_UNITS_PER_VALUE. It counts total units from the value start, not additional units to append. This constructor has no input or Codec context and cannot validate those conditions; the Codec implementation is responsible for them when returning the failure.
§Returns

Returns an incomplete decode failure.

Source

pub const fn incomplete_with_source( source: E, required_total: NonZeroUsize, ) -> Self

Creates an incomplete-input decode failure with codec-specific context.

§Parameters
  • source: Codec-specific error describing the visible incomplete prefix.
  • required_total: Current non-zero minimum units required before retrying from the value start. When returned by Codec::decode or Codec::decode_eof, it must be greater than the units currently available from that start and no greater than Codec::MAX_DECODE_UNITS_PER_VALUE. It counts total units from the value start, not additional units to append. This constructor has no input or Codec context and cannot validate those conditions; the Codec implementation is responsible for them when returning the failure.
§Returns

Returns an incomplete decode failure retaining source for adapters that need detailed EOF diagnostics.

Source

pub const fn invalid(source: E, consumed: NonZeroUsize) -> Self

Creates an invalid-input decode failure with a consumption hint.

§Parameters
  • source: Codec-specific invalid-input error.
  • consumed: Invalid input units that may be consumed.
§Returns

Returns an invalid decode failure.

Source

pub const fn invalid_unknown(source: E) -> Self

Creates an invalid-input decode failure with unknown consumption.

§Parameters
  • source: Codec-specific invalid-input error.
§Returns

Returns an invalid decode failure.

Source

pub const fn required_total(&self) -> Option<NonZeroUsize>

Returns the current minimum input length required before retrying an incomplete prefix.

§Returns

Returns Some(required_total) for incomplete failures, where the value is a lower bound that a later retry may raise, or None for invalid-input failures.

Source

pub const fn incomplete_source(&self) -> Option<&E>

Borrows the codec-specific error retained for an incomplete prefix.

§Returns

Returns Some(source) when the codec supplied incomplete-input context, or None when the failure only carries the retry bound or is invalid.

Source

pub const fn invalid_source(&self) -> Option<&E>

Borrows the codec-specific invalid-input error.

§Returns

Returns Some(source) for invalid-input failures, or None for incomplete failures.

Source

pub const fn consumed_units(&self) -> Option<NonZeroUsize>

Returns invalid units that may be consumed by a non-strict policy.

§Returns

Returns Some(consumed) for Invalid, or None when the failure is incomplete or invalid with unknown consumption.

Trait Implementations§

Source§

impl<E: Clone> Clone for DecodeFailure<E>

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<E: Copy> Copy for DecodeFailure<E>

Source§

impl<E: Debug> Debug for DecodeFailure<E>

Source§

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

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

impl<E: Eq> Eq for DecodeFailure<E>

Source§

impl<E: Hash> Hash for DecodeFailure<E>

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<E: PartialEq> PartialEq for DecodeFailure<E>

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<E: PartialEq> StructuralPartialEq for DecodeFailure<E>

Auto Trait Implementations§

§

impl<E> Forget for DecodeFailure<E>

§

impl<E> Freeze for DecodeFailure<E>
where Option<E>: Freeze, E: Freeze,

§

impl<E> RefUnwindSafe for DecodeFailure<E>

§

impl<E> Send for DecodeFailure<E>
where Option<E>: Send, E: Send,

§

impl<E> Sync for DecodeFailure<E>
where Option<E>: Sync, E: Sync,

§

impl<E> Unpin for DecodeFailure<E>
where Option<E>: Unpin, E: Unpin,

§

impl<E> UnsafeUnpin for DecodeFailure<E>

§

impl<E> UnwindSafe for DecodeFailure<E>

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.