Skip to main content

demes_forward/
error.rs

1/// Error type.
2#[derive(Debug)]
3#[non_exhaustive]
4pub enum DemesForwardError {
5    /// Stores a [`demes::DemesError`].
6    DemesError(demes::DemesError),
7    /// Errors related to time.
8    /// Will be returned if invalid time
9    /// values occur after converting
10    /// time to generations.
11    TimeError(String),
12    /// Errors related to invalid deme sizes
13    /// arising during application of size change
14    /// functions.
15    InvalidDemeSize(f64),
16    /// Errors related to invalid internal states.
17    /// In general, this error indicates a bug
18    /// that should be reported.
19    InternalError(String),
20}
21
22impl From<demes::DemesError> for DemesForwardError {
23    fn from(value: demes::DemesError) -> Self {
24        Self::DemesError(value)
25    }
26}
27
28impl std::fmt::Display for DemesForwardError {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        match self {
31            DemesForwardError::DemesError(e) => write!(f, "{e:?}"),
32            DemesForwardError::TimeError(msg) => write!(f, "time error: {msg}"),
33            DemesForwardError::InvalidDemeSize(value) => write!(f, "invalid deme size: {value}"),
34            DemesForwardError::InternalError(msg) => write!(f, "internal error: {msg}"),
35        }
36    }
37}
38
39impl std::error::Error for DemesForwardError {}