1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
use std::str::Utf8Error;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("unable to decode response body")]
BadContentEncoding(#[source] std::io::Error),
#[error("chunk size line is not valid text")]
ChunkSizeLineNotValidText {
chunk_size_line: Vec<u8>,
#[source]
source: Utf8Error,
},
#[error("Error in headers")]
Headers(#[source] rhymessage::Error),
#[error("invalid chunk size value")]
InvalidChunkSize(std::num::ParseIntError),
#[error("unexpected extra junk at the end of a chunk")]
InvalidChunkTerminator(Vec<u8>),
#[error("invalid Content-Length header value")]
InvalidContentLength(std::num::ParseIntError),
#[error("invalid status code")]
InvalidStatusCode(std::num::ParseIntError),
#[error("message exceeds maximum size limit")]
MessageTooLong,
#[error("unable to find method delimiter in request line")]
RequestLineNoMethodDelimiter(String),
#[error("unable to parse method from request line")]
RequestLineNoMethodOrExtraWhitespace(String),
#[error("unable to find target URI delimiter in request line")]
RequestLineNoTargetDelimiter(String),
#[error("unable to parse target URI from request line")]
RequestLineNoTargetOrExtraWhitespace(String),
#[error("request line is not valid text")]
RequestLineNotValidText {
request_line: Vec<u8>,
#[source]
source: Utf8Error,
},
#[error("unrecognized protocol in request line")]
RequestLineProtocol(String),
#[error("request line too long")]
RequestLineTooLong(Vec<u8>),
#[error("invalid request target URI")]
RequestTargetUriInvalid(#[from] rhymuri::Error),
#[error("status code is out of range")]
StatusCodeOutOfRange(usize),
#[error("unable to find protocol delimiter in status line")]
StatusLineNoProtocolDelimiter(String),
#[error("unable to parse status code from status line")]
StatusLineNoStatusCodeDelimiter(String),
#[error("status line is not valid text")]
StatusLineNotValidText {
status_line: Vec<u8>,
#[source]
source: Utf8Error,
},
#[error("unrecognized protocol in status line")]
StatusLineProtocol(String),
#[error("error during string format")]
StringFormat(#[from] std::io::Error),
#[error("Error in trailer")]
Trailer(#[source] rhymessage::Error),
}