cloud_sdk_reqwest/blocking/
basic_config.rs1use core::fmt;
2
3use crate::shared::{BasicCredential, BuildError, HttpsEndpoint, RequestTimeouts, UserAgent};
4
5use super::BlockingBasicClient;
6#[cfg(feature = "blocking-rustls-fips")]
7use super::config::FipsTlsPolicy;
8use super::config::{ClientSettings, configured_raw_client};
9
10pub struct BlockingBasicClientBuilder {
12 endpoint: HttpsEndpoint,
13 credential: BasicCredential,
14 user_agent: UserAgent,
15 timeouts: RequestTimeouts,
16 #[cfg(feature = "blocking-rustls-fips")]
17 fips_tls_policy: Option<FipsTlsPolicy>,
18}
19
20impl BlockingBasicClientBuilder {
21 #[must_use]
23 pub const fn new(
24 endpoint: HttpsEndpoint,
25 credential: BasicCredential,
26 user_agent: UserAgent,
27 timeouts: RequestTimeouts,
28 ) -> Self {
29 Self {
30 endpoint,
31 credential,
32 user_agent,
33 timeouts,
34 #[cfg(feature = "blocking-rustls-fips")]
35 fips_tls_policy: None,
36 }
37 }
38
39 #[cfg(feature = "blocking-rustls-fips")]
41 #[must_use]
42 pub fn with_fips_tls_policy(mut self, policy: FipsTlsPolicy) -> Self {
43 self.fips_tls_policy = Some(policy);
44 self
45 }
46
47 pub fn build(self) -> Result<BlockingBasicClient, BuildError> {
49 self.build_inner(true)
50 }
51
52 fn build_inner(self, https_only: bool) -> Result<BlockingBasicClient, BuildError> {
53 if !self.credential.scope().matches_endpoint(&self.endpoint) {
54 return Err(BuildError::CredentialEndpointMismatch);
55 }
56 let settings = ClientSettings {
57 timeouts: self.timeouts,
58 #[cfg(feature = "blocking-rustls-fips")]
59 fips_tls_policy: self.fips_tls_policy.as_ref(),
60 #[cfg(not(feature = "blocking-rustls-fips"))]
61 _lifetime: core::marker::PhantomData,
62 };
63 let client = configured_raw_client(
64 self.endpoint.clone(),
65 &self.user_agent,
66 settings,
67 https_only,
68 )?;
69 Ok(BlockingBasicClient::new(
70 client,
71 self.endpoint,
72 self.credential,
73 !https_only,
74 ))
75 }
76
77 #[cfg(test)]
78 pub(super) fn build_for_loopback(self) -> Result<BlockingBasicClient, BuildError> {
79 self.build_inner(false)
80 }
81}
82
83impl fmt::Debug for BlockingBasicClientBuilder {
84 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
85 let mut debug = formatter.debug_struct("BlockingBasicClientBuilder");
86 debug
87 .field("endpoint", &"[redacted]")
88 .field("credential", &"[redacted]")
89 .field("user_agent", &self.user_agent)
90 .field("timeouts", &self.timeouts);
91 #[cfg(feature = "blocking-rustls-fips")]
92 debug.field("fips_tls_policy", &self.fips_tls_policy);
93 debug.finish()
94 }
95}