use crate::error::{Error, Result};
pub trait SecretProvider: Send + Sync {
fn get_secret(&self, key: &str) -> Result<Option<String>>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct NoOpSecretProvider;
impl SecretProvider for NoOpSecretProvider {
fn get_secret(&self, _key: &str) -> Result<Option<String>> {
Ok(None)
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct EnvSecretProvider;
impl SecretProvider for EnvSecretProvider {
fn get_secret(&self, key: &str) -> Result<Option<String>> {
match std::env::var(key) {
Ok(v) => Ok(Some(v)),
Err(std::env::VarError::NotPresent) => Ok(None),
Err(e) => Err(Error::Internal(format!("env var {key}: {e}"))),
}
}
}