use thiserror::Error;
use serde_json;
use serde_yaml;
use toml;
use rust_i18n::t;
#[derive(Error, Debug)]
pub enum ConfigError {
#[error("{0}")]
ReadFileError(String),
#[error("{0}")]
ParseYamlError(String),
#[error("{0}")]
ParseJsonError(String),
#[error("{0}")]
ParseTomlError(String),
#[error("{0}")]
EnvVarError(String),
#[error("{0}")]
UnknownFluxType(String),
#[error("{0}")]
InvalidConfig(String),
#[error("Failed to read configuration file: {0}")]
ReadError(#[from] std::io::Error),
#[error("Failed to parse configuration file: {0}")]
FileReadError(String),
#[error("Failed to parse configuration file: {0}")]
ParseError(#[from] serde_yaml::Error),
#[error("No configuration file found.")]
NotFound,
#[error("-c {0} did not point to a valid config file or directory containing a config file.")]
ConfigArgError(String),
#[error("Failed to select configuration file: {0}")]
SelectionError(String),
}
impl From<serde_json::Error> for ConfigError {
fn from(error: serde_json::Error) -> Self {
ConfigError::ParseJsonError(t!("errors.config.parse_json_error", error = error.to_string()))
}
}
impl From<toml::de::Error> for ConfigError {
fn from(error: toml::de::Error) -> Self {
ConfigError::ParseTomlError(t!("errors.config.parse_toml_error", error = error.to_string()))
}
}
impl From<std::env::VarError> for ConfigError {
fn from(error: std::env::VarError) -> Self {
ConfigError::EnvVarError(t!("errors.config.env_var_error", error = error.to_string()))
}
}