@@ -14,7 +14,10 @@ fn version(input: &[u8]) -> IResult<&[u8], &str> {
14
14
15
15
let version_str = match str:: from_utf8 ( version) {
16
16
Err ( _) => {
17
- return Err ( nom:: Err :: Error ( ( input, ErrorKind :: Verify ) ) ) ;
17
+ return Err ( nom:: Err :: Error ( nom:: error:: Error :: new (
18
+ input,
19
+ ErrorKind :: Verify ,
20
+ ) ) ) ;
18
21
}
19
22
Ok ( version) => version,
20
23
} ;
@@ -23,8 +26,7 @@ fn version(input: &[u8]) -> IResult<&[u8], &str> {
23
26
}
24
27
25
28
fn is_header_token_char ( chr : u8 ) -> bool {
26
- match chr {
27
- 0 ..=31
29
+ !matches ! ( chr, 0 ..=31
28
30
| 128 ..=255
29
31
| b'('
30
32
| b')'
@@ -43,9 +45,7 @@ fn is_header_token_char(chr: u8) -> bool {
43
45
| b'{'
44
46
| b'}'
45
47
| b' '
46
- | b'\\' => false ,
47
- _ => true ,
48
- }
48
+ | b'\\' )
49
49
}
50
50
51
51
fn header ( input : & [ u8 ] ) -> IResult < & [ u8 ] , ( & [ u8 ] , & [ u8 ] ) > {
@@ -63,6 +63,7 @@ fn header(input: &[u8]) -> IResult<&[u8], (&[u8], &[u8])> {
63
63
64
64
/// Parse a WARC header block.
65
65
// TODO: evaluate the use of `ErrorKind::Verify` here.
66
+ #[ allow( clippy:: type_complexity) ]
66
67
pub fn headers ( input : & [ u8 ] ) -> IResult < & [ u8 ] , ( & str , Vec < ( & str , & [ u8 ] ) > , usize ) > {
67
68
let ( input, version) = version ( input) ?;
68
69
let ( input, headers) = many1 ( header) ( input) ?;
@@ -73,22 +74,31 @@ pub fn headers(input: &[u8]) -> IResult<&[u8], (&str, Vec<(&str, &[u8])>, usize)
73
74
for header in headers {
74
75
let token_str = match str:: from_utf8 ( header. 0 ) {
75
76
Err ( _) => {
76
- return Err ( nom:: Err :: Error ( ( input, ErrorKind :: Verify ) ) ) ;
77
+ return Err ( nom:: Err :: Error ( nom:: error:: Error :: new (
78
+ input,
79
+ ErrorKind :: Verify ,
80
+ ) ) ) ;
77
81
}
78
82
Ok ( token) => token,
79
83
} ;
80
84
81
- if content_length == None && token_str. to_lowercase ( ) == "content-length" {
85
+ if content_length. is_none ( ) && token_str. to_lowercase ( ) == "content-length" {
82
86
let value_str = match str:: from_utf8 ( header. 1 ) {
83
87
Err ( _) => {
84
- return Err ( nom:: Err :: Error ( ( input, ErrorKind :: Verify ) ) ) ;
88
+ return Err ( nom:: Err :: Error ( nom:: error:: Error :: new (
89
+ input,
90
+ ErrorKind :: Verify ,
91
+ ) ) ) ;
85
92
}
86
93
Ok ( value) => value,
87
94
} ;
88
95
89
96
match value_str. parse :: < usize > ( ) {
90
97
Err ( _) => {
91
- return Err ( nom:: Err :: Error ( ( input, ErrorKind :: Verify ) ) ) ;
98
+ return Err ( nom:: Err :: Error ( nom:: error:: Error :: new (
99
+ input,
100
+ ErrorKind :: Verify ,
101
+ ) ) ) ;
92
102
}
93
103
Ok ( len) => {
94
104
content_length = Some ( len) ;
@@ -101,14 +111,15 @@ pub fn headers(input: &[u8]) -> IResult<&[u8], (&str, Vec<(&str, &[u8])>, usize)
101
111
102
112
// TODO: Technically if we didn't find a `content-length` header, the record is invalid. Should
103
113
// we be returning an error here instead?
104
- if content_length == None {
114
+ if content_length. is_none ( ) {
105
115
content_length = Some ( 0 ) ;
106
116
}
107
117
108
118
Ok ( ( input, ( version, warc_headers, content_length. unwrap ( ) ) ) )
109
119
}
110
120
111
121
/// Parse an entire WARC record.
122
+ #[ allow( clippy:: type_complexity) ]
112
123
pub fn record ( input : & [ u8 ] ) -> IResult < & [ u8 ] , ( & str , Vec < ( & str , & [ u8 ] ) > , & [ u8 ] ) > {
113
124
let ( input, ( headers, _) ) = tuple ( ( headers, line_ending) ) ( input) ?;
114
125
let ( input, ( body, _, _) ) = tuple ( ( take ( headers. 2 ) , line_ending, line_ending) ) ( input) ?;
@@ -125,13 +136,13 @@ mod tests {
125
136
126
137
#[ test]
127
138
fn version_parsing ( ) {
128
- assert_eq ! ( version( & b"WARC/0.0\r \n " [ ..] ) , Ok ( ( & b"" [ ..] , & "0.0" [ .. ] ) ) ) ;
139
+ assert_eq ! ( version( & b"WARC/0.0\r \n " [ ..] ) , Ok ( ( & b"" [ ..] , "0.0" ) ) ) ;
129
140
130
- assert_eq ! ( version( & b"WARC/1.0\r \n " [ ..] ) , Ok ( ( & b"" [ ..] , & "1.0" [ .. ] ) ) ) ;
141
+ assert_eq ! ( version( & b"WARC/1.0\r \n " [ ..] ) , Ok ( ( & b"" [ ..] , "1.0" ) ) ) ;
131
142
132
143
assert_eq ! (
133
144
version( & b"WARC/2.0-alpha\r \n " [ ..] ) ,
134
- Ok ( ( & b"" [ ..] , & "2.0-alpha" [ .. ] ) )
145
+ Ok ( ( & b"" [ ..] , "2.0-alpha" ) )
135
146
) ;
136
147
}
137
148
@@ -168,7 +179,10 @@ mod tests {
168
179
169
180
assert_eq ! (
170
181
headers( & raw_invalid[ ..] ) ,
171
- Err ( Err :: Error ( ( & b"\r \n " [ ..] , ErrorKind :: Verify ) ) )
182
+ Err ( Err :: Error ( nom:: error:: Error :: new(
183
+ & b"\r \n " [ ..] ,
184
+ ErrorKind :: Verify
185
+ ) ) )
172
186
) ;
173
187
174
188
let raw = b"\
0 commit comments