Skip to main content

max / makenotwork

1.3 KB · 43 lines History Blame Raw
1 //! Typed error enum for PoM, replacing `Box<dyn Error>` throughout the crate.
2
3 use thiserror::Error;
4
5 #[derive(Debug, Error)]
6 pub enum PomError {
7 /// Filesystem errors (reading config, writing instance ID, etc.).
8 #[error(transparent)]
9 Io(#[from] std::io::Error),
10
11 /// SQLite query or connection errors.
12 #[error(transparent)]
13 Db(#[from] sqlx::Error),
14
15 /// Config file syntax errors (malformed TOML).
16 #[error(transparent)]
17 TomlParse(#[from] toml::de::Error),
18
19 /// Outbound HTTP request failures (health checks, peer heartbeats).
20 #[error(transparent)]
21 Http(#[from] reqwest::Error),
22
23 /// JSON serialization or deserialization errors.
24 #[error(transparent)]
25 Json(#[from] serde_json::Error),
26
27 /// Invalid tracing filter directives (e.g. bad `RUST_LOG` value).
28 #[error(transparent)]
29 LogFilter(#[from] tracing_subscriber::filter::ParseError),
30
31 /// Background task panicked or was cancelled.
32 #[error(transparent)]
33 Join(#[from] tokio::task::JoinError),
34
35 /// Application-level config validation errors (missing config file, unknown
36 /// target name, invalid instance). Distinct from `TomlParse` which covers
37 /// syntax-level TOML parse failures.
38 #[error("{0}")]
39 Config(String),
40 }
41
42 pub type Result<T> = std::result::Result<T, PomError>;
43