use crate::primitives::PrimitiveError;
#[derive(Debug, thiserror::Error)]
#[error("kafka frame codec failed")]
#[non_exhaustive]
pub struct FrameError {
#[source]
pub kind: FrameErrorKind,
}
impl FrameError {
#[must_use]
pub const fn new(kind: FrameErrorKind) -> Self {
Self { kind }
}
}
impl From<FrameErrorKind> for FrameError {
fn from(kind: FrameErrorKind) -> Self {
Self::new(kind)
}
}
impl From<PrimitiveError> for FrameError {
fn from(err: PrimitiveError) -> Self {
Self::new(FrameErrorKind::Primitive(err))
}
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum FrameErrorKind {
#[error(transparent)]
Primitive(#[from] PrimitiveError),
#[error("negative frame length: {length}")]
NegativeLength {
length: i32,
},
#[error("frame length {length} exceeds maximum {max}")]
TooLarge {
length: i32,
max: i32,
},
#[error("frame truncated: needed {needed} bytes, only {available} available")]
Truncated {
needed: usize,
available: usize,
},
}