statespace_server/
error.rs1use axum::Json;
4use axum::http::StatusCode;
5use axum::response::{IntoResponse, Response};
6use statespace_tool_runtime::ErrorResponse;
7
8pub use statespace_tool_runtime::Error;
9pub type Result<T> = std::result::Result<T, Error>;
10
11pub trait ErrorExt {
12 fn status_code(&self) -> StatusCode;
13}
14
15impl ErrorExt for Error {
16 fn status_code(&self) -> StatusCode {
17 StatusCode::from_u16(self.http_status_code()).unwrap_or(StatusCode::INTERNAL_SERVER_ERROR)
18 }
19}
20
21#[derive(Debug)]
22pub struct ServerError(pub Error);
23
24impl From<Error> for ServerError {
25 fn from(e: Error) -> Self {
26 Self(e)
27 }
28}
29
30impl IntoResponse for ServerError {
31 fn into_response(self) -> Response {
32 let status = self.0.status_code();
33 let response = ErrorResponse::new(self.0.user_message());
34 (status, Json(response)).into_response()
35 }
36}