use http::HeaderMap; use std::sync::Arc; /// Adds authentication headers to API requests. /// /// Implementations should be cheap and non-blocking; any asynchronous /// refresh or I/O should be handled by higher layers before requests /// reach this interface. pub trait AuthProvider: Send + Sync { fn add_auth_headers(&self, headers: &mut HeaderMap); } /// Shared auth handle passed through API clients. pub type SharedAuthProvider = Arc; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] pub struct AuthHeaderTelemetry { pub attached: bool, pub name: Option<&'static str>, } pub fn auth_header_telemetry(auth: &dyn AuthProvider) -> AuthHeaderTelemetry { let mut headers = HeaderMap::new(); auth.add_auth_headers(&mut headers); let name = headers .contains_key(http::header::AUTHORIZATION) .then_some("authorization"); AuthHeaderTelemetry { attached: name.is_some(), name, } }