Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions codegen/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ pub fn generate_client_file(
base_url: String,
authorization_token: Option<String>,
timeout: std::time::Duration,
runtime_info: Vec<(&'static str, String)>,
}

impl Client {
Expand All @@ -79,6 +80,7 @@ pub fn generate_client_file(
base_url: "https://api.sumup.com".to_string(),
authorization_token,
timeout: std::time::Duration::from_secs(10),
runtime_info: crate::version::runtime_info(),
}
}

Expand Down Expand Up @@ -130,6 +132,11 @@ pub fn generate_client_file(
self.timeout
}

/// Returns the runtime headers sent with each request.
pub(crate) fn runtime_headers(&self) -> &[(&'static str, String)] {
&self.runtime_info
}

#(#tag_methods)*
}

Expand Down
24 changes: 24 additions & 0 deletions codegen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ impl Generator {
));

self.ensure_directories()?;
self.generate_api_version_file()?;
self.generate_common_module()?;
self.generate_tag_modules()?;
self.generate_client_module()?;
Expand Down Expand Up @@ -181,6 +182,29 @@ impl Generator {
generate_client_file(&self.out_path, &self.spec, &self.schemas_by_tag.tag_schemas)
}

fn generate_api_version_file(&self) -> Result<(), String> {
let api_version = self.spec.info.version.trim().to_string();

if api_version.is_empty() {
return Err("OpenAPI spec version is empty".to_string());
}

let mut version_path = self.out_path.clone();
version_path.push("api_version.rs");

let api_version_literal = syn::LitStr::new(&api_version, Span::call_site());
let tokens = quote! {
/// The version of the SumUp API spec.
pub const API_VERSION: &str = #api_version_literal;
};

let contents = format_generated_code(tokens);
std::fs::write(&version_path, &contents)
.map_err(|e| format!("Failed to write api_version.rs: {}", e))?;

Ok(())
}

fn generate_mod_rs(&self) -> Result<(), String> {
generate_mod_file(&self.out_path, &self.schemas_by_tag)
}
Expand Down
9 changes: 9 additions & 0 deletions codegen/src/operation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,9 @@ fn generate_operation_method(
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
#query_additions
if let Some(body) = body {
request = request.json(&body);
Expand All @@ -428,6 +431,9 @@ fn generate_operation_method(
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
#query_additions
let response = request.send().await?;
}
Expand All @@ -442,6 +448,9 @@ fn generate_operation_method(
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
#query_additions
let response = request.send().await?;
}
Expand Down
22 changes: 22 additions & 0 deletions sdk/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#![forbid(unsafe_code)]

use std::process::Command;

fn main() {
let rustc_version = Command::new("rustc")
.arg("--version")
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout).ok()
} else {
None
}
})
.map(|version| version.trim().to_string());

if let Some(version) = rustc_version {
println!("cargo:rustc-env=SUMUP_RUSTC_VERSION={}", version);
}
}
4 changes: 4 additions & 0 deletions sdk/src/api_version.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// The contents of this file are generated; do not modify them.

/// The version of the SumUp API spec.
pub const API_VERSION: &str = "1.0.0";
6 changes: 6 additions & 0 deletions sdk/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ pub struct Client {
base_url: String,
authorization_token: Option<String>,
timeout: std::time::Duration,
runtime_info: Vec<(&'static str, String)>,
}
impl Client {
/// Creates a new SumUp API client with the default base URL.
Expand All @@ -21,6 +22,7 @@ impl Client {
base_url: "https://api.sumup.com".to_string(),
authorization_token,
timeout: std::time::Duration::from_secs(10),
runtime_info: crate::version::runtime_info(),
}
}
/// Overrides the underlying HTTP client used for requests.
Expand Down Expand Up @@ -63,6 +65,10 @@ impl Client {
pub fn timeout(&self) -> std::time::Duration {
self.timeout
}
/// Returns the runtime headers sent with each request.
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)
}
Expand Down
1 change: 1 addition & 0 deletions sdk/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@

#![forbid(unsafe_code)]

pub mod api_version;
pub mod client;
pub mod datetime;
pub mod error;
Expand Down
18 changes: 18 additions & 0 deletions sdk/src/resources/checkouts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.checkout_reference {
request = request.query(&[("checkout_reference", value)]);
}
Expand Down Expand Up @@ -578,6 +581,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -632,6 +638,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -682,6 +691,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -728,6 +740,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -789,6 +804,9 @@ impl<'a> CheckoutsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.amount {
request = request.query(&[("amount", value)]);
}
Expand Down
15 changes: 15 additions & 0 deletions sdk/src/resources/customers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ impl<'a> CustomersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -158,6 +161,9 @@ impl<'a> CustomersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -208,6 +214,9 @@ impl<'a> CustomersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -257,6 +266,9 @@ impl<'a> CustomersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -312,6 +324,9 @@ impl<'a> CustomersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down
15 changes: 15 additions & 0 deletions sdk/src/resources/members.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,9 @@ impl<'a> MembersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.offset {
request = request.query(&[("offset", value)]);
}
Expand Down Expand Up @@ -249,6 +252,9 @@ impl<'a> MembersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -302,6 +308,9 @@ impl<'a> MembersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -340,6 +349,9 @@ impl<'a> MembersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -383,6 +395,9 @@ impl<'a> MembersClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down
3 changes: 3 additions & 0 deletions sdk/src/resources/memberships.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ impl<'a> MembershipsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.offset {
request = request.query(&[("offset", value)]);
}
Expand Down
12 changes: 12 additions & 0 deletions sdk/src/resources/merchant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,9 @@ impl<'a> MerchantClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.include {
request = request.query(&[("include[]", value)]);
}
Expand Down Expand Up @@ -502,6 +505,9 @@ impl<'a> MerchantClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -545,6 +551,9 @@ impl<'a> MerchantClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down Expand Up @@ -582,6 +591,9 @@ impl<'a> MerchantClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
let response = request.send().await?;
let status = response.status();
match status {
Expand Down
9 changes: 9 additions & 0 deletions sdk/src/resources/merchants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,9 @@ impl<'a> MerchantsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.version {
request = request.query(&[("version", value)]);
}
Expand Down Expand Up @@ -472,6 +475,9 @@ impl<'a> MerchantsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.version {
request = request.query(&[("version", value)]);
}
Expand Down Expand Up @@ -519,6 +525,9 @@ impl<'a> MerchantsClient<'a> {
if let Some(token) = self.client.authorization_token() {
request = request.header("Authorization", format!("Bearer {}", token));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.version {
request = request.query(&[("version", value)]);
}
Expand Down
Loading