diff --git a/core/src/requests/threads.rs b/core/src/requests/threads.rs index a3eddf8..ed6e5c3 100644 --- a/core/src/requests/threads.rs +++ b/core/src/requests/threads.rs @@ -109,6 +109,7 @@ pub mod create { #[data] pub enum Err { + #[display("{_0}")] NoSuchBoard(#[from] errors::boards::NotFound), } } diff --git a/http/src/requests/mod.rs b/http/src/requests/mod.rs index ca774b7..9761f3c 100644 --- a/http/src/requests/mod.rs +++ b/http/src/requests/mod.rs @@ -4,7 +4,7 @@ pub trait Request: Send + Sync + 'static + for<'de> serde::Deserialize<'de> + serde::Serialize { type Response: IsResponse; - type Error: IsResponse; + type Error: IsResponse + std::fmt::Display; } eva::trait_set! { diff --git a/http/src/server/mod.rs b/http/src/server/mod.rs index f07dd24..fcfa416 100644 --- a/http/src/server/mod.rs +++ b/http/src/server/mod.rs @@ -1,4 +1,6 @@ -use eva::{logging as log, perfect_derive, component_configs::ComponentConfig, supervisor::SlaveRx}; +use eva::{ + component_configs::ComponentConfig, logging as log, perfect_derive, supervisor::SlaveRx, +}; use eyre::Context; use viendesu_core::{ @@ -23,14 +25,20 @@ pub trait Types: Send + Sync + 'static { type Service: Service + Clone; } -pub async fn serve(rx: SlaveRx, config: ComponentConfig, router: axum::Router) -> eyre::Result<()> { +pub async fn serve( + rx: SlaveRx, + config: ComponentConfig, + router: axum::Router, +) -> eyre::Result<()> { // TODO: use it. _ = rx; let config::Config { unencrypted, ssl: _, } = &*config; - let unencrypted = unencrypted.as_ref().expect("SSL-only currently is not supported"); + let unencrypted = unencrypted + .as_ref() + .expect("SSL-only currently is not supported"); if !unencrypted.enable { return Ok(()); diff --git a/http/src/server/response/mod.rs b/http/src/server/response/mod.rs index f0ab89b..68dfd9f 100644 --- a/http/src/server/response/mod.rs +++ b/http/src/server/response/mod.rs @@ -1,3 +1,5 @@ +use std::fmt; + use axum::{ http::StatusCode, response::{IntoResponse, Response as AxumResponse}, @@ -17,10 +19,11 @@ macro_rules! header { } #[track_caller] -pub fn err(format: Format, error: E) -> AxumResponse { +pub fn err(format: Format, error: E) -> AxumResponse { #[derive(Serialize, Deserialize)] struct Failure { pub error: E, + pub description: String, } impl HasStatusCode for Failure { @@ -29,7 +32,13 @@ pub fn err(format: Format, error: E) -> AxumResponse { } } - respond(format, Failure { error }) + respond( + format, + Failure { + description: error.to_string(), + error, + }, + ) } #[track_caller]