Skip to main content

DecodeError

Enum DecodeError 

Source
#[non_exhaustive]
pub enum DecodeError { BadMagic, VersionMismatch { supported: u8, received: u8, }, UnknownMessageType(u8), UnknownDurability(u8), HeaderCrcMismatch { expected: u32, computed: u32, }, PayloadCrcMismatch { expected: u32, computed: u32, }, TruncatedFrame, PayloadTooLarge { len: usize, cap: usize, }, ReservedFlagsSet { flags: u8, }, TrailingBytes { extra: usize, }, }
Expand description

All errors that can occur when decoding a weir wire frame.

Each variant identifies a specific frame-validation failure, and the daemon maps it to a distinct Nack reason byte: VersionMismatch is kept separate from BadMagic and HeaderCrcMismatch so the daemon can return its WIRE_VERSION in the Nack payload. The variants are NOT declared in strict decode order — the decoder validates magic → version → header CRC → message_type / durability → payload fields (so e.g. UnknownMessageType only arises on an already-CRC-valid header). Match on the variant, never on its position.

#[non_exhaustive]: the decode taxonomy is expected to grow (wire v1 already gained ReservedFlagsSet and TrailingBytes during the 1.0 hardening), so downstream matches must include a wildcard arm and adding a variant later is not a breaking change.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

BadMagic

First four bytes are not b"WEIR". Not a weir frame or stream is desynced.

§

VersionMismatch

Version byte does not equal WIRE_VERSION. Carries both sides for error messaging. Checked before header CRC so a version-mismatched frame from a newer client gets VersionMismatch, not a confusing HeaderCrcMismatch.

Fields

§supported: u8

The WIRE_VERSION this build supports.

§received: u8

The version byte carried by the rejected frame.

§

UnknownMessageType(u8)

Message type byte has no known variant.

§

UnknownDurability(u8)

Durability byte has no known variant.

§

HeaderCrcMismatch

Header CRC32 (bytes [12..16]) does not match CRC of bytes [0..12].

Fields

§expected: u32

CRC carried in the header.

§computed: u32

CRC computed over bytes [0..12].

§

PayloadCrcMismatch

Payload CRC32 (trailing 4 bytes) does not match CRC of the payload bytes.

Fields

§expected: u32

CRC carried in the trailing 4 bytes.

§computed: u32

CRC computed over the payload bytes.

§

TruncatedFrame

Buffer is shorter than the declared frame length.

§

PayloadTooLarge

payload_len exceeds the hard cap. Rejection happens before any heap allocation.

Fields

§len: usize

The declared payload length.

§cap: usize

The hard cap it exceeded.

§

ReservedFlagsSet

The reserved flags byte was nonzero. In wire v1 flags must be zero; a daemon rejects a frame that sets any flag bit rather than silently ignoring it (F52). Carries the offending byte.

Fields

§flags: u8

The nonzero flags byte the frame carried.

§

TrailingBytes

The buffer was longer than the single frame it declared. Envelope::decode requires its input to be exactly one frame (HEADER_LEN + payload_len + 4 bytes): a longer buffer is rejected rather than decoding the first frame and silently discarding the remainder, so the caller — not the codec — owns framing and an over-long buffer surfaces as an error, not lost data (G18).

Fields

§extra: usize

The number of bytes past the declared frame length.

Trait Implementations§

Source§

impl Debug for DecodeError

Source§

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

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

impl Display for DecodeError

Source§

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

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

impl Eq for DecodeError

Source§

impl Error for DecodeError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<DecodeError> for WeirError

Source§

fn from(e: DecodeError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for DecodeError

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 StructuralPartialEq for DecodeError

Auto Trait Implementations§

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

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.