#[derive(Clone, Debug)]
pub struct SyntaxDetail {
pub message: String,
pub line: u32,
pub column: u32,
}
#[derive(Clone, Debug)]
pub enum NibliError {
Syntax(SyntaxDetail),
Semantic(String),
Reasoning(String),
Backend((String, String)),
}
impl std::fmt::Display for NibliError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
NibliError::Syntax(d) => {
write!(
f,
"[Syntax Error] line {}:{}: {}",
d.line, d.column, d.message
)
}
NibliError::Semantic(m) => write!(f, "[Semantic Error] {}", m),
NibliError::Reasoning(m) => write!(f, "[Reasoning Error] {}", m),
NibliError::Backend((k, m)) => write!(f, "[Backend Error] {} — {}", k, m),
}
}
}