use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum FrameError {
#[error("unsupported lumberjack version byte: {0:#x} (expected 0x32 / '2')")]
UnsupportedVersion(u8),
#[error("unknown lumberjack frame type: {0:#x}")]
UnknownFrameType(u8),
#[error("frame payload length {requested} exceeds configured limit of {limit} bytes")]
PayloadTooLarge {
requested: usize,
limit: usize,
},
#[error("zlib decompression failed: {0}")]
Decompression(String),
#[error("decompressed payload would exceed limit of {limit} bytes")]
DecompressedTooLarge {
limit: usize,
},
#[error("zlib compression failed: {0}")]
Compression(String),
}
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum ProtocolError {
#[error("io: {0}")]
Io(#[from] std::io::Error),
#[error("codec: {0}")]
Codec(#[from] FrameError),
#[error("operation timed out: {0}")]
Timeout(&'static str),
#[error(
"unexpected ack: version=0x{version:02x} type=0x{frame_type:02x} seq={acked_seq} (expected_last_seq={expected_seq})"
)]
UnexpectedAck {
version: u8,
frame_type: u8,
acked_seq: u32,
expected_seq: u32,
},
#[error("partial ack: {acked} of {sent} events acknowledged")]
PartialAck {
acked: u32,
sent: u32,
},
#[error("no hosts configured")]
NoHostsConfigured,
#[error("all configured hosts failed; last error: {0}")]
AllHostsFailed(Box<Self>),
#[cfg(feature = "tls")]
#[error("tls config: {0}")]
Tls(String),
}