use core::fmt;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Http1ParseError {
Incomplete {
required: usize,
available: usize,
},
InvalidStartLine,
InvalidField,
InvalidContentLength,
ContentLengthOverflow,
ConflictingContentLength,
TransferEncodingWithContentLength,
InvalidTransferEncoding,
InvalidChunkedTransferEncoding,
InvalidChunkSize,
ChunkSizeOverflow,
InvalidChunkTerminator,
InvalidTrailer,
DecodedSizeOverflow,
}
impl fmt::Display for Http1ParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
Self::Incomplete { .. } => "incomplete HTTP/1 input",
Self::InvalidStartLine => "invalid HTTP/1 start line",
Self::InvalidField => "invalid HTTP/1 field",
Self::InvalidContentLength => "invalid HTTP Content-Length",
Self::ContentLengthOverflow => "HTTP Content-Length exceeds platform limit",
Self::ConflictingContentLength => "conflicting HTTP Content-Length values",
Self::TransferEncodingWithContentLength => "HTTP Transfer-Encoding with Content-Length",
Self::InvalidTransferEncoding => "invalid HTTP Transfer-Encoding",
Self::InvalidChunkedTransferEncoding => "invalid HTTP chunked Transfer-Encoding",
Self::InvalidChunkSize => "invalid HTTP chunk size",
Self::ChunkSizeOverflow => "HTTP chunk size exceeds platform limit",
Self::InvalidChunkTerminator => "invalid HTTP chunk terminator",
Self::InvalidTrailer => "invalid HTTP trailer",
Self::DecodedSizeOverflow => "decoded HTTP chunk data exceeds platform limit",
})
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Http1BuildError {
InvalidValue,
LengthTooLarge,
BufferTooShort {
required: usize,
available: usize,
},
}
impl fmt::Display for Http1BuildError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidValue => f.write_str("invalid HTTP/1 builder value"),
Self::LengthTooLarge => f.write_str("HTTP/1 head length exceeds platform limit"),
Self::BufferTooShort {
required,
available,
} => write!(
f,
"HTTP/1 buffer is too short: need {required} bytes, have {available}"
),
}
}
}