use thiserror::Error;

#[derive(Debug, Error)]
pub enum SecretsError {
    #[error("secret '{key}' not found in source '{source_name}'")]
    NotFound { key: String, source_name: String },

    #[error("secret '{key}' not found in any configured source")]
    NotFoundInAnySource { key: String },

    #[error("secrets source '{source_name}' unavailable: {reason}")]
    SourceUnavailable { source_name: String, reason: String },

    #[error("required secrets missing at startup: {keys:?}")]
    MissingRequired { keys: Vec<String> },

    #[error("secret type conversion failed for key '{key}': {reason}")]
    TypeError { key: String, reason: String },
}
