1
1
//! HTTP headers.
2
2
3
3
use std:: collections:: HashMap ;
4
- use std:: convert:: TryInto ;
4
+ use std:: convert:: Into ;
5
5
use std:: iter:: IntoIterator ;
6
6
use std:: ops:: Index ;
7
7
use std:: str:: FromStr ;
@@ -23,7 +23,7 @@ use crate::headers::{
23
23
/// use http_types::{Response, StatusCode};
24
24
///
25
25
/// let mut res = Response::new(StatusCode::Ok);
26
- /// res.insert_header("hello", "foo0").unwrap() ;
26
+ /// res.insert_header("hello", "foo0");
27
27
/// assert_eq!(res["hello"], "foo0");
28
28
/// ```
29
29
#[ derive( Debug , Clone ) ]
@@ -46,14 +46,12 @@ impl Headers {
46
46
/// use `Headers::append`
47
47
pub fn insert (
48
48
& mut self ,
49
- name : impl TryInto < HeaderName > ,
49
+ name : impl Into < HeaderName > ,
50
50
values : impl ToHeaderValues ,
51
- ) -> crate :: Result < Option < HeaderValues > > {
52
- let name = name
53
- . try_into ( )
54
- . map_err ( |_| crate :: format_err!( "Could not convert into header name" ) ) ?;
55
- let values: HeaderValues = values. to_header_values ( ) ?. collect ( ) ;
56
- Ok ( self . headers . insert ( name, values) )
51
+ ) -> Option < HeaderValues > {
52
+ let name = name. into ( ) ;
53
+ let values: HeaderValues = values. to_header_values ( ) . unwrap ( ) . collect ( ) ;
54
+ self . headers . insert ( name, values)
57
55
}
58
56
59
57
/// Append a header to the headers.
@@ -62,37 +60,35 @@ impl Headers {
62
60
/// header if there aren't any. Or else append to the existing list of headers.
63
61
pub fn append (
64
62
& mut self ,
65
- name : impl TryInto < HeaderName > ,
63
+ name : impl Into < HeaderName > ,
66
64
values : impl ToHeaderValues ,
67
65
) -> crate :: Result < ( ) > {
68
- let name = name
69
- . try_into ( )
70
- . map_err ( |_| crate :: format_err!( "Could not convert into header name" ) ) ?;
71
- match self . get_mut ( & name) {
66
+ let name = name. into ( ) ;
67
+ match self . get_mut ( name. clone ( ) ) {
72
68
Some ( headers) => {
73
69
let mut values: HeaderValues = values. to_header_values ( ) ?. collect ( ) ;
74
70
headers. append ( & mut values) ;
75
71
}
76
72
None => {
77
- self . insert ( name, values) ? ;
73
+ self . insert ( name, values) ;
78
74
}
79
75
}
80
76
Ok ( ( ) )
81
77
}
82
78
83
79
/// Get a reference to a header.
84
- pub fn get ( & self , name : & HeaderName ) -> Option < & HeaderValues > {
85
- self . headers . get ( name)
80
+ pub fn get ( & self , name : impl Into < HeaderName > ) -> Option < & HeaderValues > {
81
+ self . headers . get ( & name. into ( ) )
86
82
}
87
83
88
84
/// Get a mutable reference to a header.
89
- pub fn get_mut ( & mut self , name : & HeaderName ) -> Option < & mut HeaderValues > {
90
- self . headers . get_mut ( name)
85
+ pub fn get_mut ( & mut self , name : impl Into < HeaderName > ) -> Option < & mut HeaderValues > {
86
+ self . headers . get_mut ( & name. into ( ) )
91
87
}
92
88
93
89
/// Remove a header.
94
- pub fn remove ( & mut self , name : & HeaderName ) -> Option < HeaderValues > {
95
- self . headers . remove ( name)
90
+ pub fn remove ( & mut self , name : impl Into < HeaderName > ) -> Option < HeaderValues > {
91
+ self . headers . remove ( & name. into ( ) )
96
92
}
97
93
98
94
/// An iterator visiting all header pairs in arbitrary order.
@@ -123,7 +119,7 @@ impl Headers {
123
119
}
124
120
}
125
121
126
- impl Index < & HeaderName > for Headers {
122
+ impl Index < HeaderName > for Headers {
127
123
type Output = HeaderValues ;
128
124
129
125
/// Returns a reference to the value corresponding to the supplied name.
@@ -132,7 +128,7 @@ impl Index<&HeaderName> for Headers {
132
128
///
133
129
/// Panics if the name is not present in `Headers`.
134
130
#[ inline]
135
- fn index ( & self , name : & HeaderName ) -> & HeaderValues {
131
+ fn index ( & self , name : HeaderName ) -> & HeaderValues {
136
132
self . get ( name) . expect ( "no entry found for name" )
137
133
}
138
134
}
@@ -148,7 +144,7 @@ impl Index<&str> for Headers {
148
144
#[ inline]
149
145
fn index ( & self , name : & str ) -> & HeaderValues {
150
146
let name = HeaderName :: from_str ( name) . expect ( "string slice needs to be valid ASCII" ) ;
151
- self . get ( & name) . expect ( "no entry found for name" )
147
+ self . get ( name) . expect ( "no entry found for name" )
152
148
}
153
149
}
154
150
@@ -202,28 +198,18 @@ mod tests {
202
198
headers. append ( static_header. clone ( ) , "foo1" ) ?;
203
199
headers. append ( non_static_header. clone ( ) , "foo2" ) ?;
204
200
205
- assert_eq ! (
206
- & headers. get( & STATIC_HEADER ) . unwrap( ) [ ..] ,
207
- & [ "foo0" , "foo1" , "foo2" , ] [ ..]
208
- ) ;
209
-
210
- assert_eq ! (
211
- & headers. get( & static_header) . unwrap( ) [ ..] ,
212
- & [ "foo0" , "foo1" , "foo2" , ] [ ..]
213
- ) ;
214
-
215
- assert_eq ! (
216
- & headers. get( & non_static_header) . unwrap( ) [ ..] ,
217
- & [ "foo0" , "foo1" , "foo2" , ] [ ..]
218
- ) ;
201
+ assert_eq ! ( headers[ STATIC_HEADER ] , [ "foo0" , "foo1" , "foo2" , ] [ ..] ) ;
202
+ assert_eq ! ( headers[ static_header] , [ "foo0" , "foo1" , "foo2" , ] [ ..] ) ;
203
+ assert_eq ! ( headers[ non_static_header] , [ "foo0" , "foo1" , "foo2" , ] [ ..] ) ;
219
204
220
205
Ok ( ( ) )
221
206
}
222
207
223
208
#[ test]
224
209
fn index_into_headers ( ) {
225
210
let mut headers = Headers :: new ( ) ;
226
- headers. insert ( "hello" , "foo0" ) . unwrap ( ) ;
211
+ headers. insert ( "hello" , "foo0" ) ;
227
212
assert_eq ! ( headers[ "hello" ] , "foo0" ) ;
213
+ assert_eq ! ( headers. get( "hello" ) . unwrap( ) , "foo0" ) ;
228
214
}
229
215
}
0 commit comments