use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("schema not found: {name}")]
SchemaNotFound {
name: String,
},
#[error("invalid schema definition: {message}")]
InvalidSchema {
message: String,
},
#[error("validation failed: {message}")]
ValidationFailed {
message: String,
path: Option<String>,
},
#[error("frontmatter parse error: {message}")]
FrontmatterParse {
message: String,
line: Option<usize>,
},
#[error("YAML error: {0}")]
Yaml(#[from] serde_yaml::Error),
#[error("TOML error: {0}")]
Toml(#[from] toml::de::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_display_schema_not_found() {
let err = Error::SchemaNotFound {
name: "ieee-article".to_string(),
};
assert_eq!(err.to_string(), "schema not found: ieee-article");
}
#[test]
fn error_display_validation_failed() {
let err = Error::ValidationFailed {
message: "missing required field".to_string(),
path: Some("/title".to_string()),
};
assert_eq!(err.to_string(), "validation failed: missing required field");
}
}