use std::path::PathBuf;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum EvalError {
#[error("i/o error{}: {source}", .path.as_ref().map(|p| format!(" for {}", p.display())).unwrap_or_default())]
Io {
path: Option<PathBuf>,
source: std::io::Error,
},
#[error("failed to parse RON case {}: {source}", .path.display())]
RonParse {
path: PathBuf,
source: ron::error::SpannedError,
},
#[error("invalid regex `{pattern}`: {source}")]
Regex {
pattern: String,
source: regex::Error,
},
#[error("agent run failed: {0}")]
Agent(String),
}
impl EvalError {
pub fn agent(error: impl std::fmt::Display) -> Self {
EvalError::Agent(error.to_string())
}
}
impl From<std::io::Error> for EvalError {
fn from(source: std::io::Error) -> Self {
EvalError::Io { path: None, source }
}
}
impl From<ron::error::SpannedError> for EvalError {
fn from(source: ron::error::SpannedError) -> Self {
EvalError::RonParse {
path: PathBuf::new(),
source,
}
}
}
impl From<regex::Error> for EvalError {
fn from(source: regex::Error) -> Self {
EvalError::Regex {
pattern: String::new(),
source,
}
}
}