1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, AppError>;
4
5#[derive(Error, Debug)]
6pub enum AppError {
7 #[error("Network diagnostic failed: {message}")]
8 Diagnostic { message: String },
9
10 #[error("Platform operation failed: {message}")]
11 Platform { message: String },
12
13 #[error("I/O error: {0}")]
14 Io(#[from] std::io::Error),
15
16 #[error("HTTP request failed: {0}")]
17 Http(#[from] reqwest::Error),
18
19 #[error("DNS error: {message}")]
20 Dns { message: String },
21
22 #[error("Configuration error: {message}")]
23 Config { message: String },
24
25 #[cfg(windows)]
26 #[error("WMI query failed: {0}")]
27 Wmi(#[from] wmi::WMIError),
28}
29
30impl AppError {
31 pub fn diagnostic(message: impl Into<String>) -> Self {
32 Self::Diagnostic {
33 message: message.into(),
34 }
35 }
36
37 pub fn platform(message: impl Into<String>) -> Self {
38 Self::Platform {
39 message: message.into(),
40 }
41 }
42
43 pub fn dns(message: impl Into<String>) -> Self {
44 Self::Dns {
45 message: message.into(),
46 }
47 }
48
49 pub fn config(message: impl Into<String>) -> Self {
50 Self::Config {
51 message: message.into(),
52 }
53 }
54}