#[derive(Debug, Clone, PartialEq, Eq)]
pub enum HttpError {
Malformed(&'static str),
TooManyHeaders,
HeadTooLarge { max: usize },
BufferFull { needed: usize, available: usize },
BufferTooSmall { needed: usize, available: usize },
InvalidHeaderValue,
}
impl std::fmt::Display for HttpError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Malformed(ctx) => write!(f, "malformed HTTP: {ctx}"),
Self::TooManyHeaders => write!(f, "too many HTTP headers"),
Self::HeadTooLarge { max } => write!(f, "HTTP head exceeds {max} bytes"),
Self::BufferFull { needed, available } => {
write!(f, "buffer full: need {needed}, {available} available")
}
Self::BufferTooSmall { needed, available } => {
write!(
f,
"write buffer too small: need {needed} bytes, have {available}"
)
}
Self::InvalidHeaderValue => {
write!(f, "header name or value contains CR/LF")
}
}
}
}
impl std::error::Error for HttpError {}