use super::common::*;
#[derive(Debug, Clone)]
pub enum CheckoutCreated {}
impl crate::event::private::Sealed for CheckoutCreated {}
impl crate::events::EventSpec for CheckoutCreated {
const EVENT_TYPE: &'static str = "checkouts.created";
type FetchedObject = Checkout;
}
pub type CheckoutCreatedEvent = crate::events::Event<CheckoutCreated>;
#[derive(Debug, Clone)]
pub enum CheckoutExpired {}
impl crate::event::private::Sealed for CheckoutExpired {}
impl crate::events::EventSpec for CheckoutExpired {
const EVENT_TYPE: &'static str = "checkouts.expired";
type FetchedObject = Checkout;
}
pub type CheckoutExpiredEvent = crate::events::Event<CheckoutExpired>;
#[derive(Debug, Clone)]
pub enum CheckoutFailed {}
impl crate::event::private::Sealed for CheckoutFailed {}
impl crate::events::EventSpec for CheckoutFailed {
const EVENT_TYPE: &'static str = "checkouts.failed";
type FetchedObject = Checkout;
}
pub type CheckoutFailedEvent = crate::events::Event<CheckoutFailed>;
#[derive(Debug, Clone)]
pub enum CheckoutPaid {}
impl crate::event::private::Sealed for CheckoutPaid {}
impl crate::events::EventSpec for CheckoutPaid {
const EVENT_TYPE: &'static str = "checkouts.paid";
type FetchedObject = Checkout;
}
pub type CheckoutPaidEvent = crate::events::Event<CheckoutPaid>;
#[derive(Debug, Clone)]
pub enum CheckoutUpdated {}
impl crate::event::private::Sealed for CheckoutUpdated {}
impl crate::events::EventSpec for CheckoutUpdated {
const EVENT_TYPE: &'static str = "checkouts.updated";
type FetchedObject = Checkout;
}
pub type CheckoutUpdatedEvent = crate::events::Event<CheckoutUpdated>;
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct Card {
#[builder(setter(into, doc = "Sets [`cvv`](Card::cvv)."))]
pub cvv: String,
#[builder(setter(into, doc = "Sets [`expiry_month`](Card::expiry_month)."))]
pub expiry_month: String,
#[builder(setter(into, doc = "Sets [`expiry_year`](Card::expiry_year)."))]
pub expiry_year: String,
#[builder(setter(into, doc = "Sets [`name`](Card::name)."))]
pub name: String,
#[builder(setter(into, doc = "Sets [`number`](Card::number)."))]
pub number: String,
#[serde(rename = "type")]
#[builder(setter(doc = "Sets [`r#type`](Card::r#type)."))]
pub r#type: CardType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`zip_code`](Card::zip_code).")
)]
pub zip_code: Option<String>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct Checkout {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`amount`](Checkout::amount).")
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](Checkout::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`currency`](Checkout::currency).")
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](Checkout::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, doc = "Sets [`date`](Checkout::date)."))]
pub date: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](Checkout::description)."
)
)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`hosted_checkout_url`](Checkout::hosted_checkout_url)."
)
)]
pub hosted_checkout_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`id`](Checkout::id).")
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`mandate`](Checkout::mandate).")
)]
pub mandate: Option<MandateResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](Checkout::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`return_url`](Checkout::return_url).")
)]
pub return_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`status`](Checkout::status).")
)]
pub status: Option<CheckoutStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`transactions`](Checkout::transactions).")
)]
pub transactions: Option<Vec<CheckoutTransactionsItem>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(strip_option, doc = "Sets [`valid_until`](Checkout::valid_until).")
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutAccepted {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`next_step`](CheckoutAccepted::next_step).")
)]
pub next_step: Option<CheckoutAcceptedNextStep>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutCreateRequest {
#[builder(setter(doc = "Sets [`amount`](CheckoutCreateRequest::amount)."))]
pub amount: f32,
#[builder(setter(
into,
doc = "Sets [`checkout_reference`](CheckoutCreateRequest::checkout_reference)."
))]
pub checkout_reference: String,
#[builder(setter(doc = "Sets [`currency`](CheckoutCreateRequest::currency)."))]
pub currency: Currency,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](CheckoutCreateRequest::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](CheckoutCreateRequest::description)."
)
)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`hosted_checkout`](CheckoutCreateRequest::hosted_checkout)."
)
)]
pub hosted_checkout: Option<HostedCheckout>,
#[builder(setter(
into,
doc = "Sets [`merchant_code`](CheckoutCreateRequest::merchant_code)."
))]
pub merchant_code: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`purpose`](CheckoutCreateRequest::purpose)."
)
)]
pub purpose: Option<CheckoutCreateRequestPurpose>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`redirect_url`](CheckoutCreateRequest::redirect_url)."
)
)]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`return_url`](CheckoutCreateRequest::return_url)."
)
)]
pub return_url: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](CheckoutCreateRequest::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutSuccess {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`amount`](CheckoutSuccess::amount).")
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](CheckoutSuccess::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`currency`](CheckoutSuccess::currency).")
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](CheckoutSuccess::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`date`](CheckoutSuccess::date).")
)]
pub date: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](CheckoutSuccess::description)."
)
)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`hosted_checkout_url`](CheckoutSuccess::hosted_checkout_url)."
)
)]
pub hosted_checkout_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`id`](CheckoutSuccess::id).")
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`mandate`](CheckoutSuccess::mandate).")
)]
pub mandate: Option<MandateResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](CheckoutSuccess::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_name`](CheckoutSuccess::merchant_name)."
)
)]
pub merchant_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payment_instrument`](CheckoutSuccess::payment_instrument)."
)
)]
pub payment_instrument: Option<CheckoutSuccessPaymentInstrument>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`redirect_url`](CheckoutSuccess::redirect_url)."
)
)]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`return_url`](CheckoutSuccess::return_url)."
)
)]
pub return_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`status`](CheckoutSuccess::status).")
)]
pub status: Option<CheckoutSuccessStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_code`](CheckoutSuccess::transaction_code)."
)
)]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_id`](CheckoutSuccess::transaction_id)."
)
)]
pub transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`transactions`](CheckoutSuccess::transactions)."
)
)]
pub transactions: Option<Vec<CheckoutSuccessTransactionsItem>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](CheckoutSuccess::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`amount`](CheckoutUpdateRequest::amount).")
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](CheckoutUpdateRequest::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`currency`](CheckoutUpdateRequest::currency)."
)
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](CheckoutUpdateRequest::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](CheckoutUpdateRequest::description)."
)
)]
pub description: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](CheckoutUpdateRequest::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct DetailsError {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`details`](DetailsError::details).")
)]
pub details: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`failed_constraints`](DetailsError::failed_constraints)."
)
)]
pub failed_constraints: Option<Vec<DetailsErrorFailedConstraintsItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`status`](DetailsError::status).")
)]
pub status: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`title`](DetailsError::title).")
)]
pub title: Option<String>,
}
impl std::fmt::Display for DetailsError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for DetailsError {}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct HostedCheckout {
#[builder(setter(doc = "Sets [`enabled`](HostedCheckout::enabled)."))]
pub enabled: bool,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct MandatePayload {
#[serde(rename = "type")]
#[builder(setter(doc = "Sets [`r#type`](MandatePayload::r#type)."))]
pub r#type: MandatePayloadType,
#[builder(setter(into, doc = "Sets [`user_agent`](MandatePayload::user_agent)."))]
pub user_agent: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`user_ip`](MandatePayload::user_ip).")
)]
pub user_ip: Option<String>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ProcessCheckout {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`apple_pay`](ProcessCheckout::apple_pay).")
)]
pub apple_pay: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`card`](ProcessCheckout::card).")
)]
pub card: Option<Card>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](ProcessCheckout::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`google_pay`](ProcessCheckout::google_pay)."
)
)]
pub google_pay: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`installments`](ProcessCheckout::installments)."
)
)]
pub installments: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`mandate`](ProcessCheckout::mandate).")
)]
pub mandate: Option<MandatePayload>,
#[builder(setter(doc = "Sets [`payment_type`](ProcessCheckout::payment_type)."))]
pub payment_type: ProcessCheckoutPaymentType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`personal_details`](ProcessCheckout::personal_details)."
)
)]
pub personal_details: Option<PersonalDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`token`](ProcessCheckout::token).")
)]
pub token: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CheckoutStatus {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "PAID")]
Paid,
#[serde(rename = "EXPIRED")]
Expired,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutTransactionsItem {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`amount`](CheckoutTransactionsItem::amount)."
)
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`auth_code`](CheckoutTransactionsItem::auth_code)."
)
)]
pub auth_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`currency`](CheckoutTransactionsItem::currency)."
)
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`entry_mode`](CheckoutTransactionsItem::entry_mode)."
)
)]
pub entry_mode: Option<EntryMode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`id`](CheckoutTransactionsItem::id).")
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`installments_count`](CheckoutTransactionsItem::installments_count)."
)
)]
pub installments_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](CheckoutTransactionsItem::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payment_type`](CheckoutTransactionsItem::payment_type)."
)
)]
pub payment_type: Option<PaymentType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`status`](CheckoutTransactionsItem::status)."
)
)]
pub status: Option<TransactionStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`timestamp`](CheckoutTransactionsItem::timestamp)."
)
)]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`tip_amount`](CheckoutTransactionsItem::tip_amount)."
)
)]
pub tip_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_code`](CheckoutTransactionsItem::transaction_code)."
)
)]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`vat_amount`](CheckoutTransactionsItem::vat_amount)."
)
)]
pub vat_amount: Option<f32>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CheckoutAcceptedNextStepMechanismItem {
#[serde(rename = "iframe")]
Iframe,
#[serde(rename = "browser")]
Browser,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutAcceptedNextStepPayload {
#[serde(
flatten,
default,
skip_serializing_if = "std::collections::HashMap::is_empty"
)]
#[builder(
default,
setter(
doc = "Sets [`additional_properties`](CheckoutAcceptedNextStepPayload::additional_properties)."
)
)]
pub additional_properties: std::collections::HashMap<String, String>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutAcceptedNextStep {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`mechanism`](CheckoutAcceptedNextStep::mechanism)."
)
)]
pub mechanism: Option<Vec<CheckoutAcceptedNextStepMechanismItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`method`](CheckoutAcceptedNextStep::method)."
)
)]
pub method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payload`](CheckoutAcceptedNextStep::payload)."
)
)]
pub payload: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`redirect_url`](CheckoutAcceptedNextStep::redirect_url)."
)
)]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`url`](CheckoutAcceptedNextStep::url)."
)
)]
pub url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CheckoutCreateRequestPurpose {
#[serde(rename = "CHECKOUT")]
Checkout,
#[serde(rename = "SETUP_RECURRING_PAYMENT")]
SetupRecurringPayment,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutSuccessPaymentInstrument {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`token`](CheckoutSuccessPaymentInstrument::token)."
)
)]
pub token: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CheckoutSuccessStatus {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "PAID")]
Paid,
#[serde(rename = "EXPIRED")]
Expired,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CheckoutSuccessTransactionsItem {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`amount`](CheckoutSuccessTransactionsItem::amount)."
)
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`auth_code`](CheckoutSuccessTransactionsItem::auth_code)."
)
)]
pub auth_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`currency`](CheckoutSuccessTransactionsItem::currency)."
)
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`entry_mode`](CheckoutSuccessTransactionsItem::entry_mode)."
)
)]
pub entry_mode: Option<EntryMode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`id`](CheckoutSuccessTransactionsItem::id)."
)
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`installments_count`](CheckoutSuccessTransactionsItem::installments_count)."
)
)]
pub installments_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](CheckoutSuccessTransactionsItem::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payment_type`](CheckoutSuccessTransactionsItem::payment_type)."
)
)]
pub payment_type: Option<PaymentType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`status`](CheckoutSuccessTransactionsItem::status)."
)
)]
pub status: Option<TransactionStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`timestamp`](CheckoutSuccessTransactionsItem::timestamp)."
)
)]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`tip_amount`](CheckoutSuccessTransactionsItem::tip_amount)."
)
)]
pub tip_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_code`](CheckoutSuccessTransactionsItem::transaction_code)."
)
)]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`vat_amount`](CheckoutSuccessTransactionsItem::vat_amount)."
)
)]
pub vat_amount: Option<f32>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct DetailsErrorFailedConstraintsItem {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`message`](DetailsErrorFailedConstraintsItem::message)."
)
)]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`reference`](DetailsErrorFailedConstraintsItem::reference)."
)
)]
pub reference: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum MandatePayloadType {
#[serde(rename = "recurrent")]
Recurrent,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ProcessCheckoutPaymentType {
#[serde(rename = "card")]
Card,
#[serde(rename = "boleto")]
Boleto,
#[serde(rename = "ideal")]
Ideal,
#[serde(rename = "blik")]
Blik,
#[serde(rename = "bancontact")]
Bancontact,
#[serde(rename = "google_pay")]
GooglePay,
#[serde(rename = "apple_pay")]
ApplePay,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CreateRequestPurpose {
#[serde(rename = "CHECKOUT")]
Checkout,
#[serde(rename = "SETUP_RECURRING_PAYMENT")]
SetupRecurringPayment,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ProcessRequestPaymentType {
#[serde(rename = "card")]
Card,
#[serde(rename = "boleto")]
Boleto,
#[serde(rename = "ideal")]
Ideal,
#[serde(rename = "blik")]
Blik,
#[serde(rename = "bancontact")]
Bancontact,
#[serde(rename = "google_pay")]
GooglePay,
#[serde(rename = "apple_pay")]
ApplePay,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ProcessResponse200PaymentInstrument {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`token`](ProcessResponse200PaymentInstrument::token)."
)
)]
pub token: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ProcessResponse200Status {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "PAID")]
Paid,
#[serde(rename = "EXPIRED")]
Expired,
#[serde(untagged)]
Other(String),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ProcessResponse200TransactionsItem {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`amount`](ProcessResponse200TransactionsItem::amount)."
)
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`auth_code`](ProcessResponse200TransactionsItem::auth_code)."
)
)]
pub auth_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`currency`](ProcessResponse200TransactionsItem::currency)."
)
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`entry_mode`](ProcessResponse200TransactionsItem::entry_mode)."
)
)]
pub entry_mode: Option<EntryMode>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`id`](ProcessResponse200TransactionsItem::id)."
)
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`installments_count`](ProcessResponse200TransactionsItem::installments_count)."
)
)]
pub installments_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](ProcessResponse200TransactionsItem::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payment_type`](ProcessResponse200TransactionsItem::payment_type)."
)
)]
pub payment_type: Option<PaymentType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`status`](ProcessResponse200TransactionsItem::status)."
)
)]
pub status: Option<TransactionStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`timestamp`](ProcessResponse200TransactionsItem::timestamp)."
)
)]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`tip_amount`](ProcessResponse200TransactionsItem::tip_amount)."
)
)]
pub tip_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_code`](ProcessResponse200TransactionsItem::transaction_code)."
)
)]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`vat_amount`](ProcessResponse200TransactionsItem::vat_amount)."
)
)]
pub vat_amount: Option<f32>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListAvailablePaymentMethodsResponseAvailablePaymentMethodsItem {
#[builder(setter(
into,
doc = "Sets [`id`](ListAvailablePaymentMethodsResponseAvailablePaymentMethodsItem::id)."
))]
pub id: String,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](ListParams::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
}
pub type ListResponse = Vec<CheckoutSuccess>;
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CreateRequest {
#[builder(setter(doc = "Sets [`amount`](CreateRequest::amount)."))]
pub amount: f32,
#[builder(setter(
into,
doc = "Sets [`checkout_reference`](CreateRequest::checkout_reference)."
))]
pub checkout_reference: String,
#[builder(setter(doc = "Sets [`currency`](CreateRequest::currency)."))]
pub currency: Currency,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](CreateRequest::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](CreateRequest::description)."
)
)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`hosted_checkout`](CreateRequest::hosted_checkout)."
)
)]
pub hosted_checkout: Option<HostedCheckout>,
#[builder(setter(into, doc = "Sets [`merchant_code`](CreateRequest::merchant_code)."))]
pub merchant_code: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`purpose`](CreateRequest::purpose).")
)]
pub purpose: Option<CreateRequestPurpose>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`redirect_url`](CreateRequest::redirect_url)."
)
)]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`return_url`](CreateRequest::return_url)."
)
)]
pub return_url: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](CreateRequest::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct UpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`amount`](UpdateRequest::amount).")
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](UpdateRequest::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`currency`](UpdateRequest::currency).")
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](UpdateRequest::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](UpdateRequest::description)."
)
)]
pub description: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](UpdateRequest::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ProcessRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`apple_pay`](ProcessRequest::apple_pay).")
)]
pub apple_pay: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`card`](ProcessRequest::card).")
)]
pub card: Option<Card>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](ProcessRequest::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`google_pay`](ProcessRequest::google_pay).")
)]
pub google_pay: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`installments`](ProcessRequest::installments)."
)
)]
pub installments: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`mandate`](ProcessRequest::mandate).")
)]
pub mandate: Option<MandatePayload>,
#[builder(setter(doc = "Sets [`payment_type`](ProcessRequest::payment_type)."))]
pub payment_type: ProcessRequestPaymentType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`personal_details`](ProcessRequest::personal_details)."
)
)]
pub personal_details: Option<PersonalDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`token`](ProcessRequest::token).")
)]
pub token: Option<String>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ProcessResponse200 {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`amount`](ProcessResponse200::amount).")
)]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`checkout_reference`](ProcessResponse200::checkout_reference)."
)
)]
pub checkout_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`currency`](ProcessResponse200::currency).")
)]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`customer_id`](ProcessResponse200::customer_id)."
)
)]
pub customer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`date`](ProcessResponse200::date).")
)]
pub date: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`description`](ProcessResponse200::description)."
)
)]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`hosted_checkout_url`](ProcessResponse200::hosted_checkout_url)."
)
)]
pub hosted_checkout_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, into, doc = "Sets [`id`](ProcessResponse200::id).")
)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`mandate`](ProcessResponse200::mandate).")
)]
pub mandate: Option<MandateResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_code`](ProcessResponse200::merchant_code)."
)
)]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`merchant_name`](ProcessResponse200::merchant_name)."
)
)]
pub merchant_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`payment_instrument`](ProcessResponse200::payment_instrument)."
)
)]
pub payment_instrument: Option<ProcessResponse200PaymentInstrument>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`redirect_url`](ProcessResponse200::redirect_url)."
)
)]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`return_url`](ProcessResponse200::return_url)."
)
)]
pub return_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(strip_option, doc = "Sets [`status`](ProcessResponse200::status).")
)]
pub status: Option<ProcessResponse200Status>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_code`](ProcessResponse200::transaction_code)."
)
)]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`transaction_id`](ProcessResponse200::transaction_id)."
)
)]
pub transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`transactions`](ProcessResponse200::transactions)."
)
)]
pub transactions: Option<Vec<ProcessResponse200TransactionsItem>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`valid_until`](ProcessResponse200::valid_until)."
)
)]
pub valid_until: Option<crate::Nullable<crate::datetime::DateTime>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
#[serde(untagged)]
pub enum ProcessResponse {
Status200(ProcessResponse200),
Status202(CheckoutAccepted),
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListAvailablePaymentMethodsParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`amount`](ListAvailablePaymentMethodsParams::amount)."
)
)]
pub amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
into,
doc = "Sets [`currency`](ListAvailablePaymentMethodsParams::currency)."
)
)]
pub currency: Option<String>,
}
#[derive(
Debug,
Clone,
Default,
PartialEq,
serde::Serialize,
serde::Deserialize,
typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct ListAvailablePaymentMethodsResponse {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(
default,
setter(
strip_option,
doc = "Sets [`available_payment_methods`](ListAvailablePaymentMethodsResponse::available_payment_methods)."
)
)]
pub available_payment_methods:
Option<Vec<ListAvailablePaymentMethodsResponseAvailablePaymentMethodsItem>>,
}
#[derive(
Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, typed_builder::TypedBuilder,
)]
#[builder(doc)]
pub struct CreateApplePaySessionRequest {
#[builder(setter(into, doc = "Sets [`context`](CreateApplePaySessionRequest::context)."))]
pub context: String,
#[builder(setter(into, doc = "Sets [`target`](CreateApplePaySessionRequest::target)."))]
pub target: String,
}
pub type CreateApplePaySessionResponse = serde_json::Value;
use crate::client::Client;
#[derive(Debug, PartialEq)]
pub enum ListErrorBody {
Unauthorized(Problem),
}
impl crate::error::ProblemDetails for ListErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::Unauthorized(problem) => Some(problem),
}
}
}
#[derive(Debug, PartialEq)]
pub enum CreateErrorBody {
BadRequest(ErrorExtended),
Unauthorized(Problem),
Forbidden(ErrorForbidden),
Conflict(Error),
}
impl crate::error::ProblemDetails for CreateErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::Unauthorized(problem) => Some(problem),
_ => None,
}
}
}
#[derive(Debug, PartialEq)]
pub enum DeactivateErrorBody {
Unauthorized(Problem),
NotFound(Error),
Conflict(Error),
}
impl crate::error::ProblemDetails for DeactivateErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::Unauthorized(problem) => Some(problem),
_ => None,
}
}
}
#[derive(Debug, PartialEq)]
pub enum GetErrorBody {
Unauthorized(Problem),
NotFound(Error),
}
impl crate::error::ProblemDetails for GetErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::Unauthorized(problem) => Some(problem),
_ => None,
}
}
}
#[derive(Debug, PartialEq)]
pub enum UpdateErrorBody {
Unauthorized(Problem),
NotFound(Error),
}
impl crate::error::ProblemDetails for UpdateErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::Unauthorized(problem) => Some(problem),
_ => None,
}
}
}
#[derive(Debug, PartialEq)]
pub enum ProcessErrorBody {
BadRequest(crate::error::UnknownApiBody),
Unauthorized(Problem),
NotFound(Error),
Conflict(Error),
}
impl crate::error::ProblemDetails for ProcessErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::BadRequest(body) => crate::error::ProblemDetails::problem(body),
Self::Unauthorized(problem) => Some(problem),
_ => None,
}
}
}
#[derive(Debug, PartialEq)]
pub enum ListAvailablePaymentMethodsErrorBody {
BadRequest(DetailsError),
}
impl crate::error::ProblemDetails for ListAvailablePaymentMethodsErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
None
}
}
#[derive(Debug, PartialEq)]
pub enum CreateApplePaySessionErrorBody {
BadRequest(crate::error::UnknownApiBody),
NotFound(Error),
}
impl crate::error::ProblemDetails for CreateApplePaySessionErrorBody {
fn problem(&self) -> Option<&crate::resources::common::Problem> {
match self {
Self::BadRequest(body) => crate::error::ProblemDetails::problem(body),
_ => None,
}
}
}
#[derive(Debug)]
pub struct CheckoutsClient<'a> {
client: &'a Client,
}
impl<'a> CheckoutsClient<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
self.client
}
pub async fn list(
&self,
params: ListParams,
) -> crate::error::SdkResult<ListResponse, ListErrorBody> {
let path = "/v0.1/checkouts";
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(ListErrorBody::Unauthorized)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn create(
&self,
body: CreateRequest,
) -> crate::error::SdkResult<Checkout, CreateErrorBody> {
let path = "/v0.1/checkouts";
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.post(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout())
.json(&body);
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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 {
reqwest::StatusCode::CREATED => {
let data: Checkout = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<ErrorExtended>(raw).map(CreateErrorBody::BadRequest)
})
.await)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(CreateErrorBody::Unauthorized)
})
.await)
}
reqwest::StatusCode::FORBIDDEN => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<ErrorForbidden>(raw).map(CreateErrorBody::Forbidden)
})
.await)
}
reqwest::StatusCode::CONFLICT => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(CreateErrorBody::Conflict)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn deactivate(
&self,
checkout_id: impl AsRef<str>,
) -> crate::error::SdkResult<Checkout, DeactivateErrorBody> {
let path = format!("/v0.1/checkouts/{}", checkout_id.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.delete(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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 {
reqwest::StatusCode::OK => {
let data: Checkout = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(DeactivateErrorBody::Unauthorized)
})
.await)
}
reqwest::StatusCode::NOT_FOUND => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(DeactivateErrorBody::NotFound)
})
.await)
}
reqwest::StatusCode::CONFLICT => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(DeactivateErrorBody::Conflict)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn get(
&self,
checkout_id: impl AsRef<str>,
) -> crate::error::SdkResult<CheckoutSuccess, GetErrorBody> {
let path = format!("/v0.1/checkouts/{}", checkout_id.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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 {
reqwest::StatusCode::OK => {
let data: CheckoutSuccess = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(GetErrorBody::Unauthorized)
})
.await)
}
reqwest::StatusCode::NOT_FOUND => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(GetErrorBody::NotFound)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn update(
&self,
checkout_id: impl AsRef<str>,
body: UpdateRequest,
) -> crate::error::SdkResult<Checkout, UpdateErrorBody> {
let path = format!("/v0.1/checkouts/{}", checkout_id.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.patch(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout())
.json(&body);
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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 {
reqwest::StatusCode::OK => {
let data: Checkout = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(UpdateErrorBody::Unauthorized)
})
.await)
}
reqwest::StatusCode::NOT_FOUND => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(UpdateErrorBody::NotFound)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn process(
&self,
checkout_id: impl AsRef<str>,
body: ProcessRequest,
) -> crate::error::SdkResult<ProcessResponse, ProcessErrorBody> {
let path = format!("/v0.1/checkouts/{}", checkout_id.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.put(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout())
.json(&body);
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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 {
reqwest::StatusCode::OK => {
let data: ProcessResponse200 = response.json().await?;
Ok(ProcessResponse::Status200(data))
}
reqwest::StatusCode::ACCEPTED => {
let data: CheckoutAccepted = response.json().await?;
Ok(ProcessResponse::Status202(data))
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::from_response(response, |raw| {
Ok(ProcessErrorBody::BadRequest(
crate::error::UnknownApiBody::from_bytes(raw),
))
})
.await)
}
reqwest::StatusCode::UNAUTHORIZED => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Problem>(raw).map(ProcessErrorBody::Unauthorized)
})
.await)
}
reqwest::StatusCode::NOT_FOUND => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(ProcessErrorBody::NotFound)
})
.await)
}
reqwest::StatusCode::CONFLICT => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw).map(ProcessErrorBody::Conflict)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn list_available_payment_methods(
&self,
merchant_code: impl AsRef<str>,
params: ListAvailablePaymentMethodsParams,
) -> crate::error::SdkResult<
ListAvailablePaymentMethodsResponse,
ListAvailablePaymentMethodsErrorBody,
> {
let path = format!("/v0.1/merchants/{}/payment-methods", merchant_code.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
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)]);
}
if let Some(ref value) = params.currency {
request = request.query(&[("currency", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListAvailablePaymentMethodsResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<DetailsError>(raw)
.map(ListAvailablePaymentMethodsErrorBody::BadRequest)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
pub async fn create_apple_pay_session(
&self,
checkout_id: impl AsRef<str>,
body: Option<CreateApplePaySessionRequest>,
) -> crate::error::SdkResult<CreateApplePaySessionResponse, CreateApplePaySessionErrorBody>
{
let path = format!("/v0.2/checkouts/{}/apple-pay-session", checkout_id.as_ref());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.put(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(body) = body {
request = request.json(&body);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: CreateApplePaySessionResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::from_response(response, |raw| {
Ok(CreateApplePaySessionErrorBody::BadRequest(
crate::error::UnknownApiBody::from_bytes(raw),
))
})
.await)
}
reqwest::StatusCode::NOT_FOUND => {
Err(crate::error::SdkError::from_response(response, |raw| {
serde_json::from_slice::<Error>(raw)
.map(CreateApplePaySessionErrorBody::NotFound)
})
.await)
}
_ => Err(crate::error::SdkError::unexpected_response(response).await),
}
}
}