use caesura_options::OptionRule;
use colored::Colorize;
use std::error::Error;
use std::fmt::{Display, Formatter, Result as FmtResult};
#[derive(Debug)]
pub enum BuildError {
Options(Vec<OptionRule>),
Container(di::ValidationError),
}
impl Display for BuildError {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
match self {
BuildError::Options(errors) => {
writeln!(f, "Configuration is invalid:")?;
for error in errors {
writeln!(f, "{} {error}", "△".yellow())?;
}
Ok(())
}
BuildError::Container(error) => {
write!(f, "Failed to build the application: {error}")
}
}
}
}
impl Error for BuildError {}
impl From<Vec<OptionRule>> for BuildError {
fn from(errors: Vec<OptionRule>) -> Self {
BuildError::Options(errors)
}
}
impl From<di::ValidationError> for BuildError {
fn from(error: di::ValidationError) -> Self {
BuildError::Container(error)
}
}