1use crate::{
2 cfd::CfdError, domeseeing::DomeSeeingError, monitors::MonitorsError, pressure::PressureError,
3};
4
5#[derive(thiserror::Error)]
6pub enum Error {
7 #[error(transparent)]
8 Monitors(#[from] MonitorsError),
9 #[error(transparent)]
10 Pressure(#[from] PressureError),
11 #[error(transparent)]
12 DomeSeeing(#[from] DomeSeeingError),
13 #[error(transparent)]
14 CFD(#[from] CfdError),
15 #[error(transparent)]
16 Any(#[from] Box<dyn std::error::Error>),
17}
18
19fn error_chain_fmt(
20 e: &impl std::error::Error,
21 f: &mut std::fmt::Formatter<'_>,
22) -> std::fmt::Result {
23 writeln!(f, "{}\n", e)?;
24 let mut current = e.source();
25 while let Some(cause) = current {
26 writeln!(f, "Caused by:\n\t{}", cause)?;
27 current = cause.source();
28 }
29 Ok(())
30}
31
32impl std::fmt::Debug for Error {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 error_chain_fmt(self, f)
35 }
36}