@@ -70,18 +70,19 @@ impl StatusCode {
70
70
/// assert!(err.is_err());
71
71
/// ```
72
72
#[ inline]
73
- pub fn from_u16 ( src : u16 ) -> Result < StatusCode , InvalidStatusCode > {
74
- if !( 100 .. 1000 ) . contains ( & src) {
73
+ pub const fn from_u16 ( src : u16 ) -> Result < StatusCode , InvalidStatusCode > {
74
+ if !( 100 <= src && src < 1000 ) {
75
75
return Err ( InvalidStatusCode :: new ( ) ) ;
76
76
}
77
77
78
- NonZeroU16 :: new ( src)
79
- . map ( StatusCode )
80
- . ok_or_else ( InvalidStatusCode :: new)
78
+ match NonZeroU16 :: new ( src) {
79
+ Some ( code) => Ok ( StatusCode ( code) ) ,
80
+ None => Err ( InvalidStatusCode :: new ( ) ) ,
81
+ }
81
82
}
82
83
83
84
/// Converts a &[u8] to a status code
84
- pub fn from_bytes ( src : & [ u8 ] ) -> Result < StatusCode , InvalidStatusCode > {
85
+ pub const fn from_bytes ( src : & [ u8 ] ) -> Result < StatusCode , InvalidStatusCode > {
85
86
if src. len ( ) != 3 {
86
87
return Err ( InvalidStatusCode :: new ( ) ) ;
87
88
}
@@ -95,9 +96,11 @@ impl StatusCode {
95
96
}
96
97
97
98
let status = ( a * 100 ) + ( b * 10 ) + c;
98
- NonZeroU16 :: new ( status)
99
- . map ( StatusCode )
100
- . ok_or_else ( InvalidStatusCode :: new)
99
+
100
+ match NonZeroU16 :: new ( status) {
101
+ Some ( code) => Ok ( StatusCode ( code) ) ,
102
+ None => Err ( InvalidStatusCode :: new ( ) ) ,
103
+ }
101
104
}
102
105
103
106
/// Returns the `u16` corresponding to this `StatusCode`.
@@ -116,8 +119,8 @@ impl StatusCode {
116
119
/// assert_eq!(status.as_u16(), 200);
117
120
/// ```
118
121
#[ inline]
119
- pub fn as_u16 ( & self ) -> u16 {
120
- ( * self ) . into ( )
122
+ pub const fn as_u16 ( & self ) -> u16 {
123
+ self . 0 . get ( )
121
124
}
122
125
123
126
/// Returns a &str representation of the `StatusCode`
@@ -168,37 +171,37 @@ impl StatusCode {
168
171
/// let status = http::StatusCode::OK;
169
172
/// assert_eq!(status.canonical_reason(), Some("OK"));
170
173
/// ```
171
- pub fn canonical_reason ( & self ) -> Option < & ' static str > {
174
+ pub const fn canonical_reason ( & self ) -> Option < & ' static str > {
172
175
canonical_reason ( self . 0 . get ( ) )
173
176
}
174
177
175
178
/// Check if status is within 100-199.
176
179
#[ inline]
177
- pub fn is_informational ( & self ) -> bool {
180
+ pub const fn is_informational ( & self ) -> bool {
178
181
200 > self . 0 . get ( ) && self . 0 . get ( ) >= 100
179
182
}
180
183
181
184
/// Check if status is within 200-299.
182
185
#[ inline]
183
- pub fn is_success ( & self ) -> bool {
186
+ pub const fn is_success ( & self ) -> bool {
184
187
300 > self . 0 . get ( ) && self . 0 . get ( ) >= 200
185
188
}
186
189
187
190
/// Check if status is within 300-399.
188
191
#[ inline]
189
- pub fn is_redirection ( & self ) -> bool {
192
+ pub const fn is_redirection ( & self ) -> bool {
190
193
400 > self . 0 . get ( ) && self . 0 . get ( ) >= 300
191
194
}
192
195
193
196
/// Check if status is within 400-499.
194
197
#[ inline]
195
- pub fn is_client_error ( & self ) -> bool {
198
+ pub const fn is_client_error ( & self ) -> bool {
196
199
500 > self . 0 . get ( ) && self . 0 . get ( ) >= 400
197
200
}
198
201
199
202
/// Check if status is within 500-599.
200
203
#[ inline]
201
- pub fn is_server_error ( & self ) -> bool {
204
+ pub const fn is_server_error ( & self ) -> bool {
202
205
600 > self . 0 . get ( ) && self . 0 . get ( ) >= 500
203
206
}
204
207
}
@@ -313,7 +316,7 @@ macro_rules! status_codes {
313
316
314
317
}
315
318
316
- fn canonical_reason( num: u16 ) -> Option <& ' static str > {
319
+ const fn canonical_reason( num: u16 ) -> Option <& ' static str > {
317
320
match num {
318
321
$(
319
322
$num => Some ( $phrase) ,
@@ -519,7 +522,7 @@ status_codes! {
519
522
}
520
523
521
524
impl InvalidStatusCode {
522
- fn new ( ) -> InvalidStatusCode {
525
+ const fn new ( ) -> InvalidStatusCode {
523
526
InvalidStatusCode { _priv : ( ) }
524
527
}
525
528
}
0 commit comments