Skip to content
Snippets Groups Projects
error.rs 2.07 KiB
Newer Older
y.zobus's avatar
y.zobus committed
//! Opossum specfic error structures
use std::{error::Error, fmt::Display};

/// Opossum application specific Result type
pub type OpmResult<T> = std::result::Result<T, OpossumError>;

y.zobus's avatar
y.zobus committed
/// Errors that can be returned by various OPOSSUM functions.
#[derive(Debug, Clone)]
pub enum OpossumError {
    /// error while setting up an `OpticScenery`
    OpticScenery(String),
    /// error while setting up an `OpticGroup`. The reasons are similar to [`OpossumError::OpticScenery`]
    OpticGroup(String),
    /// (mostly internal) errors while dealing with optical ports.
    OpticPort(String),
    /// mostly runtime errors occuring during the analysis of a scenery
    Analysis(String),
    /// errors while handling optical spectra
    Spectrum(String),
    /// errors console io
    Console(String),
    /// errors in connection with properties handling
    Properties(String),
y.zobus's avatar
y.zobus committed
    /// errors not falling in one of the categories above
    Other(String),
}

impl Display for OpossumError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            OpossumError::OpticScenery(m) => {
                write!(f, "OpticScenery::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::OpticGroup(m) => {
                write!(f, "OpticGroup::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::OpticPort(m) => {
                write!(f, "OpticPort::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::Analysis(m) => {
                write!(f, "Analysis::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::Spectrum(m) => {
                write!(f, "Spectrum::{}", m)
            }
            OpossumError::Properties(m) => {
                write!(f, "Properties::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::Console(m) => {
                write!(f, "Console::{}", m)
y.zobus's avatar
y.zobus committed
            }
            OpossumError::Other(m) => write!(f, "Opossum Error::Other::{}", m),
        }
    }
}
impl Error for OpossumError {}

impl std::convert::From<String> for OpossumError {
    fn from(msg: String) -> Self {
        Self::Other(msg)
    }
}