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("Lock poisoned: {0}")]
49 LockPoisoned(String),
50
51 #[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 pub fn validation<S: Into<String>>(message: S) -> Self {
65 Self::Validation {
66 message: message.into(),
67 }
68 }
69
70 pub fn config<S: Into<String>>(message: S) -> Self {
72 Self::Config {
73 message: message.into(),
74 }
75 }
76
77 pub fn generic<S: Into<String>>(message: S) -> Self {
79 Self::Generic(message.into())
80 }
81}