axum_error_object/
status.rs1use axum::http::StatusCode;
2
3use crate::ErrorResponse;
4
5pub trait Status<T> {
6 #[inline]
7 fn status(self, status: StatusCode) -> crate::Result<T>
8 where
9 Self: Sized,
10 {
11 self.with_status(move || status)
12 }
13
14 fn with_status(self, status: impl FnOnce() -> StatusCode) -> crate::Result<T>;
15}
16
17impl<T, E> Status<T> for Result<T, E>
18where
19 E: Into<anyhow::Error>,
20{
21 fn with_status(self, status: impl FnOnce() -> StatusCode) -> crate::Result<T> {
22 match self {
23 Ok(value) => Ok(value),
24 Err(error) => Err(ErrorResponse::from_status(status()).with_source(error.into())),
25 }
26 }
27}
28
29impl<T> Status<T> for Option<T> {
30 fn with_status(self, status: impl FnOnce() -> StatusCode) -> crate::Result<T> {
31 match self {
32 Some(value) => Ok(value),
33 None => Err(ErrorResponse::from_status(status())),
34 }
35 }
36}