use thiserror::Error;
#[derive(Debug, Error)]
pub enum OxiforgeError {
#[error("{file}:{line}:{column}: {message}")]
Validation {
file: String,
line: usize,
column: usize,
message: String,
},
#[error("YAML parse error: {source}")]
Yaml {
#[from]
source: serde_yaml::Error,
},
#[error("IO error: {source}")]
Io {
#[from]
source: std::io::Error,
},
#[error("{0}")]
Other(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_displays_location() {
let e = OxiforgeError::Validation {
file: "ui.yaml".into(),
line: 14,
column: 5,
message: "unknown widget type 'buttn'".into(),
};
let msg = e.to_string();
assert!(msg.contains("ui.yaml:14:5"));
assert!(msg.contains("buttn"));
}
}