1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, Error>;
7
8#[derive(Debug, Error)]
10pub enum Error {
11 #[error("schema not found: {name}")]
13 SchemaNotFound {
14 name: String,
16 },
17
18 #[error("invalid schema definition: {message}")]
20 InvalidSchema {
21 message: String,
23 },
24
25 #[error("validation failed: {message}")]
27 ValidationFailed {
28 message: String,
30 path: Option<String>,
32 },
33
34 #[error("frontmatter parse error: {message}")]
36 FrontmatterParse {
37 message: String,
39 line: Option<usize>,
41 },
42
43 #[error("YAML error: {0}")]
45 Yaml(#[from] serde_yaml::Error),
46
47 #[error("TOML error: {0}")]
49 Toml(#[from] toml::de::Error),
50
51 #[error("JSON error: {0}")]
53 Json(#[from] serde_json::Error),
54
55 #[error("I/O error: {0}")]
57 Io(#[from] std::io::Error),
58}
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63
64 #[test]
65 fn error_display_schema_not_found() {
66 let err = Error::SchemaNotFound {
67 name: "ieee-article".to_string(),
68 };
69 assert_eq!(err.to_string(), "schema not found: ieee-article");
70 }
71
72 #[test]
73 fn error_display_validation_failed() {
74 let err = Error::ValidationFailed {
75 message: "missing required field".to_string(),
76 path: Some("/title".to_string()),
77 };
78 assert_eq!(err.to_string(), "validation failed: missing required field");
79 }
80}