cloud_terrastodon_credentials 0.35.1

Helpers for getting Azure PAT and stuff for Cloud Terrastodon
use crate::AzureDevOpsPersonalAccessToken;
use base64::prelude::BASE64_STANDARD;
use base64::write::EncoderWriter;
use cloud_terrastodon_azure_types::AzureAccessToken;
use reqwest::header::HeaderValue;
use std::io::Write;

pub trait AuthBearerExt {
    fn as_authorization_header_value(&self) -> HeaderValue;
}
impl AuthBearerExt for str {
    fn as_authorization_header_value(&self) -> HeaderValue {
        let mut buf = b"Basic ".to_vec();
        {
            let username = "";
            let password = self;
            let mut encoder = EncoderWriter::new(&mut buf, &BASE64_STANDARD);
            encoder
                .write_fmt(format_args!("{username}:{password}"))
                .unwrap();
        }
        let mut header = HeaderValue::from_bytes(&buf).expect("base64 is always valid HeaderValue");
        header.set_sensitive(true);
        header
    }
}
impl AuthBearerExt for String {
    fn as_authorization_header_value(&self) -> HeaderValue {
        self.as_str().as_authorization_header_value()
    }
}
impl<T: AsRef<str>> AuthBearerExt for AzureAccessToken<T> {
    fn as_authorization_header_value(&self) -> HeaderValue {
        self.access_token.as_ref().as_authorization_header_value()
    }
}
impl AuthBearerExt for AzureDevOpsPersonalAccessToken {
    fn as_authorization_header_value(&self) -> HeaderValue {
        self.as_str().as_authorization_header_value()
    }
}