use std::fmt;
use http::HeaderMap;
use http::header::{HeaderName, HeaderValue};
use secrecy::{ExposeSecret, SecretString};
#[derive(Clone)]
pub struct Credentials {
api_key: SecretString,
}
impl Credentials {
pub fn from_api_key(key: impl Into<String>) -> Self {
Self {
api_key: SecretString::from(key.into()),
}
}
pub(crate) fn write_into(&self, headers: &mut HeaderMap) -> crate::Result<()> {
let value = HeaderValue::from_str(self.api_key.expose_secret()).map_err(|_| {
crate::Error::Config("API key contains characters invalid for an HTTP header".into())
})?;
headers.insert(HeaderName::from_static("x-api-key"), value);
Ok(())
}
}
impl fmt::Debug for Credentials {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Credentials")
.field("api_key", &"<redacted>")
.finish()
}
}