1use serde::{Deserialize, Serialize};
2#[cfg(feature = "tabled")]
3use tabled::Tabled;
4use thiserror::Error;
5
6#[cfg_attr(feature = "tabled", derive(Tabled))]
7#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
8pub struct ErrorResponse {
9 pub detail: String,
10}
11
12#[derive(Error, Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
13#[error("{0}")]
14pub struct ConversionError(pub String);
15
16pub fn error_chain_fmt(
17 e: &impl std::error::Error,
18 f: &mut std::fmt::Formatter<'_>,
19) -> std::fmt::Result {
20 writeln!(f, "{e}")?;
21 let mut current = e.source();
22 while let Some(cause) = current {
23 writeln!(f, "caused by: {cause}")?;
24 current = cause.source();
25 }
26 Ok(())
27}