//! Codec-level errors. Used by [`MxReferenceHandle`](crate::MxReferenceHandle), //! [`NmxTransferEnvelope`](crate::NmxTransferEnvelope), and the M1+ message //! codecs. use thiserror::Error; #[derive(Debug, Error)] #[non_exhaustive] pub enum CodecError { /// A buffer was shorter than required to decode the type. #[error("short read: expected {expected} bytes, got {actual}")] ShortRead { expected: usize, actual: usize }, /// `name.trim().is_empty()`. Mirrors `ArgumentException.ThrowIfNullOrWhiteSpace` /// in `MxReferenceHandle.cs:49`. #[error("name must not be empty or whitespace-only")] InvalidName, /// The `inner_length` field declared in an envelope did not match the /// actual body size. #[error("inner length {declared} does not match body size {actual}")] InnerLengthMismatch { declared: i32, actual: usize }, #[error("unsupported version {actual} (expected {expected})")] UnsupportedVersion { expected: u16, actual: u16 }, #[error("unsupported protocol marker {0:#010x}")] UnsupportedProtocolMarker(i32), #[error("unexpected opcode {0:#04x}")] UnexpectedOpcode(u8), /// Decoder failure with a position and human-readable reason. #[error("decode at offset {offset} ({reason}); buffer len {buffer_len}")] Decode { offset: usize, reason: &'static str, buffer_len: usize, }, }