use crate::ir::span::Span;
#[derive(Debug, Clone, PartialEq)]
pub struct BindingError {
pub kind: BindingErrorKind,
pub message: String,
pub span: Span,
pub suggestion: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BindingErrorKind {
UnknownField,
TypeMismatch,
UnknownMethod,
InvalidOperation,
}
impl std::fmt::Display for BindingError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"error[{}]: {} at line {}, column {}",
self.kind as u8, self.message, self.span.line, self.span.column
)?;
if let Some(suggestion) = &self.suggestion {
write!(f, "\n help: {}", suggestion)?;
}
Ok(())
}
}