1use core::fmt;
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7pub enum Http1ParseError {
8 Incomplete {
10 required: usize,
12 available: usize,
14 },
15 InvalidStartLine,
17 InvalidField,
19 InvalidContentLength,
21 ContentLengthOverflow,
23 ConflictingContentLength,
25 TransferEncodingWithContentLength,
27 InvalidTransferEncoding,
29 InvalidChunkedTransferEncoding,
31 InvalidChunkSize,
33 ChunkSizeOverflow,
35 InvalidChunkTerminator,
37 InvalidTrailer,
39 DecodedSizeOverflow,
41}
42
43impl fmt::Display for Http1ParseError {
44 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45 f.write_str(match self {
46 Self::Incomplete { .. } => "incomplete HTTP/1 input",
47 Self::InvalidStartLine => "invalid HTTP/1 start line",
48 Self::InvalidField => "invalid HTTP/1 field",
49 Self::InvalidContentLength => "invalid HTTP Content-Length",
50 Self::ContentLengthOverflow => "HTTP Content-Length exceeds platform limit",
51 Self::ConflictingContentLength => "conflicting HTTP Content-Length values",
52 Self::TransferEncodingWithContentLength => "HTTP Transfer-Encoding with Content-Length",
53 Self::InvalidTransferEncoding => "invalid HTTP Transfer-Encoding",
54 Self::InvalidChunkedTransferEncoding => "invalid HTTP chunked Transfer-Encoding",
55 Self::InvalidChunkSize => "invalid HTTP chunk size",
56 Self::ChunkSizeOverflow => "HTTP chunk size exceeds platform limit",
57 Self::InvalidChunkTerminator => "invalid HTTP chunk terminator",
58 Self::InvalidTrailer => "invalid HTTP trailer",
59 Self::DecodedSizeOverflow => "decoded HTTP chunk data exceeds platform limit",
60 })
61 }
62}
63
64#[derive(Clone, Copy, Debug, Eq, PartialEq)]
66pub enum Http1BuildError {
67 InvalidValue,
69 LengthTooLarge,
71 BufferTooShort {
73 required: usize,
75 available: usize,
77 },
78}
79
80impl fmt::Display for Http1BuildError {
81 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
82 match self {
83 Self::InvalidValue => f.write_str("invalid HTTP/1 builder value"),
84 Self::LengthTooLarge => f.write_str("HTTP/1 head length exceeds platform limit"),
85 Self::BufferTooShort {
86 required,
87 available,
88 } => write!(
89 f,
90 "HTTP/1 buffer is too short: need {required} bytes, have {available}"
91 ),
92 }
93 }
94}