@@ -28,8 +28,9 @@ mod code_503_service_unavailable;
28
28
use code_500_internal_server_error:: InternalServerError ;
29
29
30
30
use super :: types:: headers:: {
31
- access_control_allow_origin:: AccessControlAllowOriginHeader , ratelimit:: RateLimitHeader ,
32
- retry_after:: RetryAfterHeader ,
31
+ access_control_allow_origin:: AccessControlAllowOriginHeader ,
32
+ ratelimit:: RateLimitHeader ,
33
+ retry_after:: { RetryAfterHeader , RetryAfterOption } ,
33
34
} ;
34
35
35
36
/// Default error responses
@@ -121,20 +122,35 @@ impl<T> WithErrorResponses<T> {
121
122
pub ( crate ) fn handle_error ( err : & anyhow:: Error ) -> Self {
122
123
match err {
123
124
err if err. is :: < bb8:: RunError < tokio_postgres:: Error > > ( ) => {
124
- let error = ServiceUnavailable :: new ( None ) ;
125
- WithErrorResponses :: Error ( ErrorResponses :: ServiceUnavailable (
126
- Json ( error) ,
127
- Some ( RetryAfterHeader :: default ( ) ) ,
128
- ) )
129
- } ,
130
- err => {
131
- let error = InternalServerError :: new ( None ) ;
132
- error ! ( id=%error. id( ) , error=?err) ;
133
- WithErrorResponses :: Error ( ErrorResponses :: ServerError ( Json ( error) ) )
125
+ Self :: service_unavailable ( err, RetryAfterOption :: Default )
134
126
} ,
127
+ err => Self :: internal_error ( err) ,
135
128
}
136
129
}
137
130
131
+ /// Handle a 503 service unavailable error response.
132
+ ///
133
+ /// Returns a 503 Service unavailable Error response.
134
+ pub ( crate ) fn service_unavailable ( err : & anyhow:: Error , retry : RetryAfterOption ) -> Self {
135
+ let error = ServiceUnavailable :: new ( None ) ;
136
+ error ! ( id=%error. id( ) , error=?err, retry_after=?retry) ;
137
+ let retry = match retry {
138
+ RetryAfterOption :: Default => Some ( RetryAfterHeader :: default ( ) ) ,
139
+ RetryAfterOption :: None => None ,
140
+ RetryAfterOption :: Some ( value) => Some ( value) ,
141
+ } ;
142
+ WithErrorResponses :: Error ( ErrorResponses :: ServiceUnavailable ( Json ( error) , retry) )
143
+ }
144
+
145
+ /// Handle a 500 internal error response.
146
+ ///
147
+ /// Returns a 500 Internal Error response.
148
+ pub ( crate ) fn internal_error ( err : & anyhow:: Error ) -> Self {
149
+ let error = InternalServerError :: new ( None ) ;
150
+ error ! ( id=%error. id( ) , error=?err) ;
151
+ WithErrorResponses :: Error ( ErrorResponses :: ServerError ( Json ( error) ) )
152
+ }
153
+
138
154
/// Handle a 401 unauthorized response.
139
155
///
140
156
/// Returns a 401 Unauthorized response.
0 commit comments