use crate::transport::build_basic_auth_header;
pub trait AuthProvider: Send + Sync {
fn auth_header(&self) -> String;
}
#[derive(Debug, Clone)]
pub struct ClientCredentialsProvider {
header: String,
client_id: String,
}
impl ClientCredentialsProvider {
pub fn new(client_id: impl Into<String>, client_secret: &str) -> Self {
let client_id = client_id.into();
let header = build_basic_auth_header(&client_id, client_secret);
Self { header, client_id }
}
pub fn client_id(&self) -> &str {
&self.client_id
}
}
impl AuthProvider for ClientCredentialsProvider {
fn auth_header(&self) -> String {
self.header.clone()
}
}
pub struct InlineCredentials {
header: String,
}
impl InlineCredentials {
pub fn new(client_id: &str, client_secret: &str) -> Self {
Self {
header: build_basic_auth_header(client_id, client_secret),
}
}
}
impl AuthProvider for InlineCredentials {
fn auth_header(&self) -> String {
self.header.clone()
}
}