Skip to main content

olai_http/gcp/
mod.rs

1use std::sync::Arc;
2
3use futures::future::BoxFuture;
4
5use self::credential::GcpCredential;
6use crate::CredentialProvider;
7use crate::{ClientOptions, RequestSigner, Result, RetryConfig};
8
9pub use builder::*;
10
11mod builder;
12pub(crate) mod credential;
13
14pub type GcpCredentialProvider = Arc<dyn CredentialProvider<Credential = GcpCredential>>;
15
16#[derive(Debug, Clone)]
17pub struct GoogleConfig {
18    pub credentials: GcpCredentialProvider,
19
20    pub retry_config: RetryConfig,
21
22    pub client_options: ClientOptions,
23}
24
25impl GoogleConfig {
26    pub(crate) fn new(
27        credentials: GcpCredentialProvider,
28        retry_config: RetryConfig,
29        client_options: ClientOptions,
30    ) -> Self {
31        Self {
32            credentials,
33            retry_config,
34            client_options,
35        }
36    }
37
38    pub(crate) async fn get_credential(&self) -> Result<Arc<GcpCredential>> {
39        self.credentials.get_credential().await
40    }
41}
42
43impl RequestSigner for GoogleConfig {
44    fn sign<'a>(
45        &'a self,
46        req: reqwest::RequestBuilder,
47    ) -> BoxFuture<'a, Result<reqwest::RequestBuilder>> {
48        Box::pin(async move {
49            let credential = self.get_credential().await?;
50            Ok(req.bearer_auth(&credential.bearer))
51        })
52    }
53}