dampen_core/expr/
error.rs

1use crate::ir::span::Span;
2
3/// Error during binding evaluation
4#[derive(Debug, Clone, PartialEq)]
5pub struct BindingError {
6    pub kind: BindingErrorKind,
7    pub message: String,
8    pub span: Span,
9    pub suggestion: Option<String>,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13pub enum BindingErrorKind {
14    /// Field does not exist on Model
15    UnknownField,
16
17    /// Type mismatch in expression
18    TypeMismatch,
19
20    /// Method does not exist
21    UnknownMethod,
22
23    /// Invalid operation
24    InvalidOperation,
25}
26
27impl std::fmt::Display for BindingError {
28    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29        write!(
30            f,
31            "error[{}]: {} at line {}, column {}",
32            self.kind as u8, self.message, self.span.line, self.span.column
33        )?;
34        if let Some(suggestion) = &self.suggestion {
35            write!(f, "\n  help: {}", suggestion)?;
36        }
37        Ok(())
38    }
39}