use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum WireError {
#[error("unexpected end of buffer at offset {offset}: need {need} bytes, have {have}")]
UnexpectedEof {
offset: usize,
need: usize,
have: usize,
},
#[error("invalid utf-8 at offset {offset}")]
InvalidUtf8 { offset: usize },
#[error("unknown command code: {0}")]
UnknownCommand(u32),
#[error("unknown discriminant {value} for {type_name} at offset {offset}")]
UnknownDiscriminant {
type_name: &'static str,
value: u8,
offset: usize,
},
#[error("payload too large: {size} bytes, max {max}")]
PayloadTooLarge { size: usize, max: usize },
#[error("validation failed: {0}")]
Validation(Cow<'static, str>),
#[error(
"invalid batch checksum: stored {stored}, computed {computed}, base offset {base_offset}"
)]
InvalidBatchChecksum {
stored: u64,
computed: u64,
base_offset: u64,
},
#[error("invalid message checksum: stored {stored}, computed {computed}, offset {offset}")]
InvalidMessageChecksum {
stored: u64,
computed: u64,
offset: u64,
},
#[error("message timestamp delta {0} exceeds the batch maximum")]
InvalidMessageTimestampDelta(u64),
}