1pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(Debug, thiserror::Error)]
8pub enum Error {
9 #[error("Validation error: {message}")]
11 Validation {
12 message: String,
14 },
15
16 #[error("Configuration error: {message}")]
18 Config {
19 message: String,
21 },
22
23 #[error("IO error: {0}")]
25 Io(#[from] std::io::Error),
26
27 #[error("JSON error: {0}")]
29 Json(#[from] serde_json::Error),
30
31 #[error("YAML error: {0}")]
33 Yaml(#[from] serde_yaml::Error),
34
35 #[error("HTTP error: {0}")]
37 Http(#[from] reqwest::Error),
38
39 #[error("URL parse error: {0}")]
41 UrlParse(#[from] url::ParseError),
42
43 #[error("Regex error: {0}")]
45 Regex(#[from] regex::Error),
46
47 #[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 pub fn validation<S: Into<String>>(message: S) -> Self {
61 Self::Validation {
62 message: message.into(),
63 }
64 }
65
66 pub fn config<S: Into<String>>(message: S) -> Self {
68 Self::Config {
69 message: message.into(),
70 }
71 }
72
73 pub fn generic<S: Into<String>>(message: S) -> Self {
75 Self::Generic(message.into())
76 }
77}