squareup/http/client/
http_client_configuration.rs1use package_info::PackageInfo;
4use std::default::Default;
5use std::env;
6use std::time::Duration;
7
8use crate::{config::CargoPackageInfo, http::Headers};
9
10const DEFAULT_TIMEOUT: u32 = 60;
11
12#[derive(Clone, Debug)]
14pub struct HttpClientConfiguration {
15 pub timeout: u32,
17 pub user_agent: String,
19 pub default_headers: Headers,
21 pub retry_configuration: RetryConfiguration,
23}
24
25#[derive(Clone, Debug, Eq, PartialEq)]
26pub struct RetryConfiguration {
27 pub retries_count: u32,
31 pub min_retry_interval: Duration,
33 pub max_retry_interval: Duration,
35 pub base: u32,
41}
42
43impl Default for RetryConfiguration {
44 fn default() -> Self {
45 Self {
46 retries_count: 0,
47 min_retry_interval: Duration::from_secs(1),
48 max_retry_interval: Duration::from_secs(30 * 60),
49 base: 3,
50 }
51 }
52}
53
54impl HttpClientConfiguration {
55 pub fn new(timeout: u32, user_agent: String, mut default_headers: Headers) -> Self {
58 if !default_headers.has_user_agent() {
59 default_headers.set_user_agent(&user_agent);
60 }
61 Self {
62 timeout,
63 user_agent,
64 default_headers,
65 retry_configuration: Default::default(),
66 }
67 }
68
69 pub(crate) fn default_user_agent() -> String {
71 let sdk_version = CargoPackageInfo::version().unwrap_or_default();
72 let engine = "Rust";
73 let rust_version = rustc_version_runtime::version();
74 let os = env::consts::OS;
75 format!(
76 "Rust Square API Client Lib ({}) {}/{} ({})",
77 sdk_version, engine, rust_version, os
78 )
79 }
80}
81
82impl Default for HttpClientConfiguration {
83 fn default() -> Self {
85 Self {
86 timeout: DEFAULT_TIMEOUT,
87 user_agent: Self::default_user_agent(),
88 default_headers: Default::default(),
89 retry_configuration: Default::default(),
90 }
91 }
92}
93
94#[cfg(test)]
95mod tests {
96 use crate::http::Headers;
97 use crate::http::client::{HttpClientConfiguration, RetryConfiguration};
98
99 #[test]
100 fn http_client_configuration_new_with_default_headers() {
101 let http_client_configuration =
102 HttpClientConfiguration::new(15, String::from("some_user_agent"), Headers::default());
103 assert_eq!(15, http_client_configuration.timeout);
104 assert_eq!(
105 String::from("some_user_agent"),
106 http_client_configuration.user_agent
107 );
108 assert_eq!(
109 Headers::default(),
110 http_client_configuration.default_headers
111 );
112 assert_eq!(
113 RetryConfiguration::default(),
114 http_client_configuration.retry_configuration
115 );
116 }
117
118 #[test]
119 fn http_client_configuration_new_with_different_user_agent_in_headers() {
120 let http_client_configuration =
122 HttpClientConfiguration::new(15, String::from("some_user_agent"), Headers::default());
123 assert_eq!(15, http_client_configuration.timeout);
124 assert_eq!(
125 String::from("some_user_agent"),
126 http_client_configuration.user_agent
127 );
128 assert_eq!(
129 Headers::default(),
130 http_client_configuration.default_headers
131 );
132 assert_eq!(
133 RetryConfiguration::default(),
134 http_client_configuration.retry_configuration
135 );
136 }
137}