use crate::auth::Authorization;
#[derive(Debug, Clone)]
pub struct Client {
http_client: reqwest::Client,
base_url: String,
authorization: Option<Authorization>,
timeout: std::time::Duration,
runtime_info: Vec<(&'static str, String)>,
}
impl Client {
fn build_http_client() -> reqwest::Client {
let mut default_headers = reqwest::header::HeaderMap::new();
default_headers.insert(
reqwest::header::ACCEPT,
reqwest::header::HeaderValue::from_static("application/problem+json, application/json"),
);
reqwest::Client::builder()
.default_headers(default_headers)
.build()
.expect("failed to build reqwest client with default headers")
}
pub fn new() -> Self {
let authorization = std::env::var("SUMUP_API_KEY")
.ok()
.map(Authorization::APIKey);
Self {
http_client: Self::build_http_client(),
base_url: "https://api.sumup.com".to_string(),
authorization,
timeout: std::time::Duration::from_secs(10),
runtime_info: crate::version::runtime_info(),
}
}
pub fn with_client(mut self, http_client: reqwest::Client) -> Self {
self.http_client = http_client;
self
}
pub fn with_base_url(mut self, base_url: impl Into<String>) -> Self {
self.base_url = base_url.into();
self
}
pub fn with_authorization(mut self, auth: Authorization) -> Self {
self.authorization = Some(auth);
self
}
pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
self.timeout = timeout;
self
}
pub(crate) fn http_client(&self) -> &reqwest::Client {
&self.http_client
}
pub fn base_url(&self) -> &str {
&self.base_url
}
pub fn authorization(&self) -> Option<&str> {
self.authorization.as_ref().map(|auth| auth.get_header())
}
pub fn timeout(&self) -> std::time::Duration {
self.timeout
}
pub(crate) fn runtime_headers(&self) -> &[(&'static str, String)] {
&self.runtime_info
}
pub fn checkouts(&self) -> crate::resources::checkouts::CheckoutsClient<'_> {
crate::resources::checkouts::CheckoutsClient::new(self)
}
pub fn customers(&self) -> crate::resources::customers::CustomersClient<'_> {
crate::resources::customers::CustomersClient::new(self)
}
pub fn members(&self) -> crate::resources::members::MembersClient<'_> {
crate::resources::members::MembersClient::new(self)
}
pub fn memberships(&self) -> crate::resources::memberships::MembershipsClient<'_> {
crate::resources::memberships::MembershipsClient::new(self)
}
pub fn merchants(&self) -> crate::resources::merchants::MerchantsClient<'_> {
crate::resources::merchants::MerchantsClient::new(self)
}
pub fn payouts(&self) -> crate::resources::payouts::PayoutsClient<'_> {
crate::resources::payouts::PayoutsClient::new(self)
}
pub fn readers(&self) -> crate::resources::readers::ReadersClient<'_> {
crate::resources::readers::ReadersClient::new(self)
}
pub fn receipts(&self) -> crate::resources::receipts::ReceiptsClient<'_> {
crate::resources::receipts::ReceiptsClient::new(self)
}
pub fn roles(&self) -> crate::resources::roles::RolesClient<'_> {
crate::resources::roles::RolesClient::new(self)
}
#[deprecated = "Subaccounts API is deprecated, please use [Members](https://developer.sumup.com/api/members) API instead to manage your account members."]
pub fn subaccounts(&self) -> crate::resources::subaccounts::SubaccountsClient<'_> {
crate::resources::subaccounts::SubaccountsClient::new(self)
}
pub fn transactions(&self) -> crate::resources::transactions::TransactionsClient<'_> {
crate::resources::transactions::TransactionsClient::new(self)
}
}
impl Default for Client {
fn default() -> Self {
Self::new()
}
}