parse_monitors/
error.rs

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}