walker_common/sender/provider/
inject.rs1use super::{Credentials, TokenProvider};
2use crate::sender::Error;
3use std::future::Future;
4use tracing::instrument;
5
6pub trait TokenInjector: Sized + Send + Sync {
8 fn inject_token(
9 self,
10 token_provider: &dyn TokenProvider,
11 ) -> impl Future<Output = Result<Self, Error>>;
12}
13
14impl TokenInjector for reqwest::RequestBuilder {
16 #[allow(clippy::blocks_in_conditions)]
18 #[instrument(level = "debug", skip(token_provider), err)]
19 async fn inject_token(self, token_provider: &dyn TokenProvider) -> Result<Self, Error> {
20 if let Some(credentials) = token_provider.provide_access_token().await? {
21 Ok(match credentials {
22 Credentials::Bearer(token) => self.bearer_auth(token),
23 Credentials::Basic(username, password) => self.basic_auth(username, password),
24 })
25 } else {
26 Ok(self)
27 }
28 }
29}