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    /// Generic error with message string
48    #[error("Generic error: {0}")]
49    Generic(String),
50}
51
52impl From<String> for Error {
53    fn from(message: String) -> Self {
54        Self::Generic(message)
55    }
56}
57
58impl Error {
59    /// Create a validation error
60    pub fn validation<S: Into<String>>(message: S) -> Self {
61        Self::Validation {
62            message: message.into(),
63        }
64    }
65
66    /// Create a configuration error
67    pub fn config<S: Into<String>>(message: S) -> Self {
68        Self::Config {
69            message: message.into(),
70        }
71    }
72
73    /// Create a generic error
74    pub fn generic<S: Into<String>>(message: S) -> Self {
75        Self::Generic(message.into())
76    }
77}