use std::path::PathBuf;
pub type Result<T> = std::result::Result<T, AgentConfigError>;
#[derive(Debug, thiserror::Error)]
pub enum AgentConfigError {
#[error("Failed to read config file at {path}: {source}")]
ReadError {
path: PathBuf,
#[source]
source: std::io::Error,
},
#[error("Failed to write config file at {path}: {source}")]
WriteError {
path: PathBuf,
#[source]
source: std::io::Error,
},
#[error("JSON parse error in {path}: {source}")]
JsonParseError {
path: PathBuf,
#[source]
source: serde_json::Error,
},
#[error("TOML parse error in {path}: {source}")]
TomlParseError {
path: PathBuf,
#[source]
source: Box<toml::de::Error>,
},
#[error("YAML parse error in {path}: {source}")]
YamlParseError {
path: PathBuf,
#[source]
source: Box<serde_yaml::Error>,
},
#[error("Serialization error: {0}")]
SerializeError(#[from] serde_json::Error),
#[error("Validation error: {0}")]
ValidationError(String),
#[error("Config file not found: {0}")]
NotFound(PathBuf),
#[error("Unsupported config format '{format}' for file {path}")]
UnsupportedFormat { format: String, path: PathBuf },
#[error("Invalid config layer: {0}")]
InvalidLayer(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("{0}")]
Other(String),
}