Skip to main content

mockforge_data/
error.rs

1//! Error types for MockForge Data
2
3/// Result type alias for MockForge Data operations
4pub type Result<T> = std::result::Result<T, Error>;
5
6/// Core error types for MockForge Data operations
7#[derive(Debug, thiserror::Error)]
8pub enum Error {
9    /// Validation error (schema/format validation failed)
10    #[error("Validation error: {message}")]
11    Validation {
12        /// Validation error message
13        message: String,
14    },
15
16    /// Configuration error (invalid config or missing required fields)
17    #[error("Configuration error: {message}")]
18    Config {
19        /// Configuration error message
20        message: String,
21    },
22
23    /// I/O error (file read/write operations)
24    #[error("IO error: {0}")]
25    Io(#[from] std::io::Error),
26
27    /// JSON serialization/deserialization error
28    #[error("JSON error: {0}")]
29    Json(#[from] serde_json::Error),
30
31    /// YAML serialization/deserialization error
32    #[error("YAML error: {0}")]
33    Yaml(#[from] serde_yaml::Error),
34
35    /// HTTP client request error
36    #[error("HTTP error: {0}")]
37    Http(#[from] reqwest::Error),
38
39    /// URL parsing error
40    #[error("URL parse error: {0}")]
41    UrlParse(#[from] url::ParseError),
42
43    /// Regular expression compilation error
44    #[error("Regex error: {0}")]
45    Regex(#[from] regex::Error),
46
47    /// Lock poisoned error (a thread panicked while holding a lock)
48    #[error("Lock poisoned: {0}")]
49    LockPoisoned(String),
50
51    /// Generic error with message string
52    #[error("Generic error: {0}")]
53    Generic(String),
54}
55
56impl From<String> for Error {
57    fn from(message: String) -> Self {
58        Self::Generic(message)
59    }
60}
61
62impl Error {
63    /// Create a validation error
64    pub fn validation<S: Into<String>>(message: S) -> Self {
65        Self::Validation {
66            message: message.into(),
67        }
68    }
69
70    /// Create a configuration error
71    pub fn config<S: Into<String>>(message: S) -> Self {
72        Self::Config {
73            message: message.into(),
74        }
75    }
76
77    /// Create a generic error
78    pub fn generic<S: Into<String>>(message: S) -> Self {
79        Self::Generic(message.into())
80    }
81}