use crate::Headers;
use crate::resolver::{Error, Result};
use std::collections::HashMap;
#[derive(Clone)]
pub enum AuthData {
FromEnv(String),
Key(String),
RequestOverride {
url: String,
headers: Headers,
},
MultiKeys(HashMap<String, String>),
None,
}
impl AuthData {
pub fn from_env(env_name: impl Into<String>) -> Self {
AuthData::FromEnv(env_name.into())
}
pub fn from_single(value: impl Into<String>) -> Self {
AuthData::Key(value.into())
}
pub fn from_multi(data: HashMap<String, String>) -> Self {
AuthData::MultiKeys(data)
}
}
impl AuthData {
pub fn single_key_value(&self) -> Result<String> {
match self {
AuthData::RequestOverride { .. } => Ok(String::new()),
AuthData::FromEnv(env_name) => {
let value = std::env::var(env_name).map_err(|_| Error::ApiKeyEnvNotFound {
env_name: env_name.to_string(),
})?;
Ok(value)
}
AuthData::Key(value) => Ok(value.to_string()),
_ => Err(Error::ResolverAuthDataNotSingleValue),
}
}
}
impl std::fmt::Debug for AuthData {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
AuthData::FromEnv(_env_name) => write!(f, "AuthData::FromEnv(REDACTED)"),
AuthData::Key(_) => write!(f, "AuthData::Single(REDACTED)"),
AuthData::MultiKeys(_) => write!(f, "AuthData::Multi(REDACTED)"),
AuthData::RequestOverride { .. } => {
write!(f, "AuthData::RequestOverride {{ url: REDACTED, headers: REDACTED }}")
}
AuthData::None => write!(f, "None"),
}
}
}