use std::fmt;
use reqwest::RequestBuilder;
use reqwest::header::AUTHORIZATION;
#[derive(Clone, Default)]
pub enum Auth {
ApiKey(String),
Bearer(String),
AccessToken(String),
AccessCode(String),
#[default]
None,
}
impl Auth {
pub(crate) fn apply(&self, req: RequestBuilder) -> RequestBuilder {
match self {
Auth::ApiKey(k) => req.header("X-Api-Key", k),
Auth::Bearer(t) => req.header(AUTHORIZATION, format!("Bearer {t}")),
Auth::AccessToken(t) => req.query(&[("access-token", t)]),
Auth::AccessCode(c) => req.query(&[("signer-access-code", c)]),
Auth::None => req,
}
}
pub(crate) fn signer_access_code(&self) -> Option<&str> {
if let Auth::AccessCode(code) = self {
Some(code.as_str())
} else {
None
}
}
}
impl fmt::Debug for Auth {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Auth::ApiKey(_) => f.write_str("ApiKey(**redacted**)"),
Auth::Bearer(_) => f.write_str("Bearer(**redacted**)"),
Auth::AccessToken(_) => f.write_str("AccessToken(**redacted**)"),
Auth::AccessCode(_) => f.write_str("AccessCode(**redacted**)"),
Auth::None => f.write_str("None"),
}
}
}