use crate::error::IrithyllError;
use irithyll_core::error::ConfigError;
#[derive(Debug)]
#[non_exhaustive]
pub enum FactoryError {
InvalidConfig(ConfigError),
IncompatibleArm {
reason: String,
},
}
impl core::fmt::Display for FactoryError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
FactoryError::InvalidConfig(e) => write!(f, "invalid config: {}", e),
FactoryError::IncompatibleArm { reason } => {
write!(f, "incompatible arm: {}", reason)
}
}
}
}
impl std::error::Error for FactoryError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
FactoryError::InvalidConfig(e) => Some(e),
FactoryError::IncompatibleArm { .. } => None,
}
}
}
impl From<ConfigError> for FactoryError {
fn from(e: ConfigError) -> Self {
FactoryError::InvalidConfig(e)
}
}
impl From<IrithyllError> for FactoryError {
fn from(e: IrithyllError) -> Self {
match e {
IrithyllError::InvalidConfig(ce) => FactoryError::InvalidConfig(ce),
other => FactoryError::IncompatibleArm {
reason: other.to_string(),
},
}
}
}