//! Typed error enum for PoM, replacing `Box` throughout the crate. use thiserror::Error; #[derive(Debug, Error)] pub enum PomError { /// Filesystem errors (reading config, writing instance ID, etc.). #[error(transparent)] Io(#[from] std::io::Error), /// SQLite query or connection errors. #[error(transparent)] Db(#[from] sqlx::Error), /// Config file syntax errors (malformed TOML). #[error(transparent)] TomlParse(#[from] toml::de::Error), /// Outbound HTTP request failures (health checks, peer heartbeats). #[error(transparent)] Http(#[from] reqwest::Error), /// JSON serialization or deserialization errors. #[error(transparent)] Json(#[from] serde_json::Error), /// Invalid tracing filter directives (e.g. bad `RUST_LOG` value). #[error(transparent)] LogFilter(#[from] tracing_subscriber::filter::ParseError), /// Background task panicked or was cancelled. #[error(transparent)] Join(#[from] tokio::task::JoinError), /// Application-level config validation errors (missing config file, unknown /// target name, invalid instance). Distinct from `TomlParse` which covers /// syntax-level TOML parse failures. #[error("{0}")] Config(String), } pub type Result = std::result::Result;