use thiserror::Error;
#[derive(Debug, Error)]
pub enum ProtoError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("bincode encode error: {0}")]
Encode(#[from] bincode::error::EncodeError),
#[error("bincode decode error: {0}")]
Decode(#[from] bincode::error::DecodeError),
#[error("unknown message type: {0:#04x}")]
UnknownMessageType(u8),
#[error("frame too large: {size} bytes (max {max})")]
FrameTooLarge { size: u32, max: u32 },
#[error("incomplete frame: expected {expected} bytes, got {actual}")]
IncompleteFrame { expected: usize, actual: usize },
}