kutil_http/
errors.rs

1use {
2    http::*,
3    std::{fmt, result::Result},
4};
5
6//
7// MapErrorStatusCode
8//
9
10/// Map [Result] error to a [StatusCode].
11pub trait MapErrorStatusCode<OkT> {
12    /// Map [Result] error to a [StatusCode].
13    fn map_err_status_code(self, status: StatusCode, message: &str) -> Result<OkT, StatusCode>;
14
15    /// Map [Result] error to [StatusCode::INTERNAL_SERVER_ERROR].
16    fn map_err_internal_server(self, message: &str) -> Result<OkT, StatusCode>;
17}
18
19impl<OkT, FromErrorT> MapErrorStatusCode<OkT> for Result<OkT, FromErrorT>
20where
21    FromErrorT: fmt::Display,
22{
23    fn map_err_status_code(self, status: StatusCode, message: &str) -> Result<OkT, StatusCode> {
24        self.map_err(|error| {
25            tracing::error!("{}: {}", message, error);
26            status
27        })
28    }
29
30    fn map_err_internal_server(self, message: &str) -> Result<OkT, StatusCode> {
31        self.map_err_status_code(StatusCode::INTERNAL_SERVER_ERROR, message)
32    }
33}