@@ -7,41 +7,48 @@ use std::error::Error as StdError;
7
7
/// This trait is sealed and cannot be implemented outside of `http-types`.
8
8
pub trait ResultExt < T , E > : private:: Sealed {
9
9
/// Wrap the error value with an additional status code.
10
- fn status ( self , status : StatusCode ) -> Result < T , Error > ;
10
+ fn status < S > ( self , status : S ) -> Result < T , Error >
11
+ where
12
+ S : Into < StatusCode > ;
11
13
12
14
/// Wrap the error value with an additional status code that is evaluated
13
15
/// lazily only once an error does occur.
14
- fn with_status < F > ( self , f : F ) -> Result < T , Error >
16
+ fn with_status < S , F > ( self , f : F ) -> Result < T , Error >
15
17
where
16
- F : FnOnce ( ) -> StatusCode ;
18
+ S : Into < StatusCode > ,
19
+ F : FnOnce ( ) -> S ;
17
20
}
18
21
19
22
impl < T , E > ResultExt < T , E > for Result < T , E >
20
23
where
21
24
E : StdError + Send + Sync + ' static ,
22
25
{
23
- fn status ( self , status : StatusCode ) -> Result < T , Error > {
24
- self . map_err ( |error| Error :: new ( status, error) )
26
+ fn status < S > ( self , status : S ) -> Result < T , Error > where
27
+ S : Into < StatusCode > {
28
+ self . map_err ( |error| Error :: new ( status. into ( ) , error) )
25
29
}
26
30
27
- fn with_status < F > ( self , f : F ) -> Result < T , Error >
31
+ fn with_status < S , F > ( self , f : F ) -> Result < T , Error >
28
32
where
29
- F : FnOnce ( ) -> StatusCode ,
33
+ S : Into < StatusCode > ,
34
+ F : FnOnce ( ) -> S ,
30
35
{
31
- self . map_err ( |error| Error :: new ( f ( ) , error) )
36
+ self . map_err ( |error| Error :: new ( f ( ) . into ( ) , error) )
32
37
}
33
38
}
34
39
35
40
impl < T > ResultExt < T , Infallible > for Option < T > {
36
- fn status ( self , status : StatusCode ) -> Result < T , Error > {
37
- self . ok_or_else ( || Error :: from_str ( status, "NoneError" ) )
41
+ fn status < S > ( self , status : S ) -> Result < T , Error >
42
+ where S : Into < StatusCode > {
43
+ self . ok_or_else ( || Error :: from_str ( status. into ( ) , "NoneError" ) )
38
44
}
39
45
40
- fn with_status < F > ( self , f : F ) -> Result < T , Error >
46
+ fn with_status < S , F > ( self , f : F ) -> Result < T , Error >
41
47
where
42
- F : FnOnce ( ) -> StatusCode ,
48
+ S : Into < StatusCode > ,
49
+ F : FnOnce ( ) -> S ,
43
50
{
44
- self . ok_or_else ( || Error :: from_str ( f ( ) , "NoneError" ) )
51
+ self . ok_or_else ( || Error :: from_str ( f ( ) . into ( ) , "NoneError" ) )
45
52
}
46
53
}
47
54
0 commit comments