sounding_analysis/
error.rs

1//! Error types for the sounding-analysis crate.
2use std::{error::Error, fmt::Display};
3
4/// Shorthand for results.
5pub type Result<T> = std::result::Result<T, AnalysisError>;
6
7/// Error type for the crate.
8#[derive(Clone, Copy, PartialEq, Eq, Debug)]
9pub enum AnalysisError {
10    /// A profile that is required for this analysis is missing.
11    MissingProfile,
12    /// A value (surface value, index, location, etc) that is required is not available.
13    MissingValue,
14    /// Not enough data available for anlaysis
15    NotEnoughData,
16    /// There is no data available that meets the requirements.
17    NoDataProfile,
18    /// Bad or invalid input.
19    InvalidInput,
20    /// Missing data during interpolation, or it would have been extrapolation
21    InterpolationError,
22    /// Failed a pre-reequisite for this analysis
23    FailedPrerequisite,
24    /// Forward an error from the metfor crate
25    MetForError,
26}
27
28impl Display for AnalysisError {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
30        use crate::AnalysisError::*;
31        match self {
32            MissingProfile => write!(f, "missing profile required for the analysis"),
33            MissingValue => write!(f, "missing value required for analysis"),
34            NotEnoughData => write!(f, "not enough data available for analysis"),
35            NoDataProfile => write!(f, "profile is full of missing values, cannot do analysis"),
36            InvalidInput => write!(f, "invalid input"),
37            InterpolationError => write!(f, "none value encountered during interpolation"),
38            FailedPrerequisite => write!(f, "failed a prerequisite for this analysis"),
39            MetForError => write!(f, "error bubbled up from metfor crate"),
40        }
41    }
42}
43
44impl Error for AnalysisError {}