cloud_sdk_reqwest/asynchronous/
basic_config.rs1use core::fmt;
2
3use crate::shared::{BasicCredential, BuildError, HttpsEndpoint, RequestTimeouts, UserAgent};
4
5use super::AsyncBasicClient;
6use super::config::configured_client;
7
8pub struct AsyncBasicClientBuilder {
10 endpoint: HttpsEndpoint,
11 credential: BasicCredential,
12 user_agent: UserAgent,
13 timeouts: RequestTimeouts,
14}
15
16impl AsyncBasicClientBuilder {
17 #[must_use]
19 pub const fn new(
20 endpoint: HttpsEndpoint,
21 credential: BasicCredential,
22 user_agent: UserAgent,
23 timeouts: RequestTimeouts,
24 ) -> Self {
25 Self {
26 endpoint,
27 credential,
28 user_agent,
29 timeouts,
30 }
31 }
32
33 pub fn build(self) -> Result<AsyncBasicClient, BuildError> {
35 self.build_inner(true)
36 }
37
38 fn build_inner(self, https_only: bool) -> Result<AsyncBasicClient, BuildError> {
39 if !self.credential.scope().matches_endpoint(&self.endpoint) {
40 return Err(BuildError::CredentialEndpointMismatch);
41 }
42 let client = configured_client(&self.user_agent, self.timeouts, https_only)?;
43 Ok(AsyncBasicClient::new(
44 client,
45 self.endpoint,
46 self.credential,
47 !https_only,
48 ))
49 }
50
51 #[cfg(test)]
52 pub(super) fn build_for_loopback(self) -> Result<AsyncBasicClient, BuildError> {
53 self.build_inner(false)
54 }
55}
56
57impl fmt::Debug for AsyncBasicClientBuilder {
58 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
59 formatter
60 .debug_struct("AsyncBasicClientBuilder")
61 .field("endpoint", &"[redacted]")
62 .field("credential", &"[redacted]")
63 .field("user_agent", &self.user_agent)
64 .field("timeouts", &self.timeouts)
65 .finish()
66 }
67}