square_api_client/config/
configuration.rs1use std::env;
4
5use log::warn;
6
7use crate::http::client::HttpClientConfiguration;
8
9use super::Environment;
10
11const DEFAULT_BASE_URI: &str = "/v2";
12pub(crate) const DEFAULT_SQUARE_VERSION: &str = "2022-02-16";
13
14#[derive(Clone, Debug)]
16pub struct Configuration {
17 pub environment: Environment,
19 pub square_version: String,
21 pub http_client_config: HttpClientConfiguration,
23 pub access_token: String,
27 pub base_uri: String,
29}
30
31impl Configuration {
32 pub(crate) fn get_base_url(&self) -> String {
35 let base_url = self.environment.get_base_url();
36 format!("{}{}", base_url, self.base_uri)
37 }
38}
39
40pub(crate) fn default_authorization() -> String {
43 format!(
44 "Bearer {}",
45 env::var("SQUARE_API_TOKEN").unwrap_or_else(|_| {
46 warn!("No SQUARE_API_TOKEN environment variable found");
47 String::new()
48 })
49 )
50}
51
52impl Default for Configuration {
53 fn default() -> Self {
54 Self {
55 environment: Default::default(),
56 square_version: DEFAULT_SQUARE_VERSION.to_owned(),
57 http_client_config: Default::default(),
58 access_token: default_authorization(),
59 base_uri: DEFAULT_BASE_URI.to_owned(),
60 }
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use crate::config::{Configuration, Environment};
67
68 #[test]
69 fn get_base_url_default_url() {
70 let configuration = Configuration::default();
71 assert_eq!("https://connect.squareupsandbox.com/v2", configuration.get_base_url());
72 }
73
74 #[test]
75 fn get_base_url_for_custom_url() {
76 let mut configuration = Configuration::default();
77 configuration.environment = Environment::Custom(String::from("some_custom_url"));
78 assert_eq!("some_custom_url/v2", configuration.get_base_url());
79 }
80
81 #[test]
82 fn get_base_url_with_different_base_uri() {
83 let mut configuration = Configuration::default();
84 configuration.base_uri = String::from("/custom_base_uri");
85 assert_eq!(
86 "https://connect.squareupsandbox.com/custom_base_uri",
87 configuration.get_base_url()
88 );
89 }
90}