use crate::config::{Client, Response};
use crate::ids::{CustomerId, SourceId, TokenId};
use crate::params::{Expand, Metadata, Object, Timestamp};
use crate::resources::{
Address, BillingDetails, Currency, Shipping, SourceRedirectFlowFailureReason,
SourceRedirectFlowStatus, SourceStatus, SourceUsage,
};
use serde_derive::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Source {
pub id: SourceId,
#[serde(skip_serializing_if = "Option::is_none")]
pub ach_credit_transfer: Option<SourceTypeAchCreditTransfer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ach_debit: Option<SourceTypeAchDebit>,
#[serde(skip_serializing_if = "Option::is_none")]
pub alipay: Option<SourceTypeAlipay>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bancontact: Option<SourceTypeBancontact>,
#[serde(skip_serializing_if = "Option::is_none")]
pub card: Option<SourceTypeCard>,
#[serde(skip_serializing_if = "Option::is_none")]
pub card_present: Option<SourceTypeCardPresent>,
pub client_secret: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub code_verification: Option<SourceCodeVerificationFlow>,
pub created: Timestamp,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eps: Option<SourceTypeEps>,
pub flow: SourceFlow,
#[serde(skip_serializing_if = "Option::is_none")]
pub giropay: Option<SourceTypeGiropay>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ideal: Option<SourceTypeIdeal>,
#[serde(skip_serializing_if = "Option::is_none")]
pub klarna: Option<SourceTypeKlarna>,
pub livemode: bool,
#[serde(default)]
pub metadata: Metadata,
#[serde(skip_serializing_if = "Option::is_none")]
pub multibanco: Option<SourceTypeMultibanco>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<SourceOwner>,
#[serde(skip_serializing_if = "Option::is_none")]
pub p24: Option<SourceTypeP24>,
#[serde(skip_serializing_if = "Option::is_none")]
pub receiver: Option<SourceReceiverFlow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect: Option<SourceRedirectFlow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sepa_debit: Option<SourceTypeSepaDebit>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sofort: Option<SourceTypeSofort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_order: Option<SourceOrder>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
pub status: SourceStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub three_d_secure: Option<SourceTypeThreeDSecure>,
#[serde(rename = "type")]
pub type_: SourceType,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage: Option<SourceUsage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wechat: Option<SourceTypeWechat>,
}
impl Source {
pub fn create(client: &Client, params: CreateSource<'_>) -> Response<Source> {
client.post_form("/sources", ¶ms)
}
pub fn retrieve(client: &Client, id: &SourceId, expand: &[&str]) -> Response<Source> {
client.get_query(&format!("/sources/{}", id), &Expand { expand })
}
pub fn update(client: &Client, id: &SourceId, params: UpdateSource<'_>) -> Response<Source> {
client.post_form(&format!("/sources/{}", id), ¶ms)
}
}
impl Object for Source {
type Id = SourceId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"source"
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceCodeVerificationFlow {
pub attempts_remaining: i64,
pub status: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceOrder {
pub amount: i64,
pub currency: Currency,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<SourceOrderItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping: Option<Shipping>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceOrderItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity: Option<u64>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceOwner {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verified_phone: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceReceiverFlow {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
pub amount_charged: i64,
pub amount_received: i64,
pub amount_returned: i64,
pub refund_attributes_method: String,
pub refund_attributes_status: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceRedirectFlow {
#[serde(skip_serializing_if = "Option::is_none")]
pub failure_reason: Option<SourceRedirectFlowFailureReason>,
pub return_url: String,
pub status: SourceRedirectFlowStatus,
pub url: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeAchCreditTransfer {
#[serde(skip_serializing_if = "Option::is_none")]
pub account_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_routing_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub routing_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub swift_code: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeAchDebit {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub routing_number: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeAlipay {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_string: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub native_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeBancontact {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iban_last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub preferred_language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeCard {
#[serde(skip_serializing_if = "Option::is_none")]
pub address_line1_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address_zip_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub brand: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cvc_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_month: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_year: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub funding: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub three_d_secure: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tokenization_method: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeCardPresent {
#[serde(skip_serializing_if = "Option::is_none")]
pub application_cryptogram: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_preferred_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authorization_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authorization_response_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub brand: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cvm_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dedicated_file_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub emv_auth_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evidence_customer_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evidence_transaction_certificate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_month: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_year: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub funding: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pos_device_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pos_entry_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reader: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub terminal_verification_results: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_status_information: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeEps {
#[serde(skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeGiropay {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeIdeal {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iban_last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeKlarna {
#[serde(skip_serializing_if = "Option::is_none")]
pub background_image_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_later_asset_urls_descriptive: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_later_asset_urls_standard: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_later_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_later_redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_now_asset_urls_descriptive: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_now_asset_urls_standard: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_now_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_now_redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_over_time_asset_urls_descriptive: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_over_time_asset_urls_standard: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_over_time_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pay_over_time_redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_method_categories: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub purchase_country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub purchase_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping_first_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping_last_name: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeMultibanco {
#[serde(skip_serializing_if = "Option::is_none")]
pub entity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_city: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_line1: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_line2: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_postal_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_address_state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_account_holder_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_iban: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeP24 {
#[serde(skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeSepaDebit {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mandate_reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mandate_url: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeSofort {
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bank_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iban_last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub preferred_language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeThreeDSecure {
#[serde(skip_serializing_if = "Option::is_none")]
pub address_line1_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address_zip_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authenticated: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub brand: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub card: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cvc_check: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_month: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exp_year: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fingerprint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub funding: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last4: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub three_d_secure: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tokenization_method: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceTypeWechat {
#[serde(skip_serializing_if = "Option::is_none")]
pub prepay_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub qr_code_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<String>,
}
#[derive(Clone, Debug, Serialize, Default)]
pub struct CreateSource<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<CustomerId>,
#[serde(skip_serializing_if = "Expand::is_empty")]
pub expand: &'a [&'a str],
#[serde(skip_serializing_if = "Option::is_none")]
pub flow: Option<SourceFlow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mandate: Option<SourceMandateParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub original_source: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<BillingDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
pub receiver: Option<CreateSourceReceiver>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect: Option<CreateSourceRedirect>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_order: Option<CreateSourceSourceOrder>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statement_descriptor: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<TokenId>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<&'a str>,
}
impl<'a> CreateSource<'a> {
pub fn new() -> Self {
CreateSource {
amount: Default::default(),
currency: Default::default(),
customer: Default::default(),
expand: Default::default(),
flow: Default::default(),
mandate: Default::default(),
metadata: Default::default(),
original_source: Default::default(),
owner: Default::default(),
receiver: Default::default(),
redirect: Default::default(),
source_order: Default::default(),
statement_descriptor: Default::default(),
token: Default::default(),
type_: Default::default(),
}
}
}
#[derive(Clone, Debug, Serialize, Default)]
pub struct UpdateSource<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Expand::is_empty")]
pub expand: &'a [&'a str],
#[serde(skip_serializing_if = "Option::is_none")]
pub mandate: Option<SourceMandateParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<BillingDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_order: Option<UpdateSourceSourceOrder>,
}
impl<'a> UpdateSource<'a> {
pub fn new() -> Self {
UpdateSource {
amount: Default::default(),
expand: Default::default(),
mandate: Default::default(),
metadata: Default::default(),
owner: Default::default(),
source_order: Default::default(),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceReceiver {
#[serde(skip_serializing_if = "Option::is_none")]
pub refund_attributes_method: Option<SourceRefundNotificationMethod>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceRedirect {
pub return_url: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceSourceOrder {
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<CreateSourceSourceOrderItems>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping: Option<CreateSourceSourceOrderShipping>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceMandateParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub acceptance: Option<SourceAcceptanceParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interval: Option<SourceMandateInterval>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notification_method: Option<SourceMandateNotificationMethod>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UpdateSourceSourceOrder {
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<UpdateSourceSourceOrderItems>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping: Option<UpdateSourceSourceOrderShipping>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceSourceOrderItems {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity: Option<u64>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<CreateSourceSourceOrderItemsType>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceSourceOrderShipping {
pub address: CreateSourceSourceOrderShippingAddress,
#[serde(skip_serializing_if = "Option::is_none")]
pub carrier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracking_number: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceAcceptanceParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<Timestamp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offline: Option<SourceAcceptanceOfflineParams>,
#[serde(skip_serializing_if = "Option::is_none")]
pub online: Option<SourceAcceptanceOnlineParams>,
pub status: SourceAcceptanceParamsStatus,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<SourceAcceptanceParamsType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_agent: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UpdateSourceSourceOrderItems {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity: Option<u64>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<UpdateSourceSourceOrderItemsType>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UpdateSourceSourceOrderShipping {
pub address: UpdateSourceSourceOrderShippingAddress,
#[serde(skip_serializing_if = "Option::is_none")]
pub carrier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracking_number: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreateSourceSourceOrderShippingAddress {
#[serde(skip_serializing_if = "Option::is_none")]
pub city: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
pub line1: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub line2: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postal_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceAcceptanceOfflineParams {
pub contact_email: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceAcceptanceOnlineParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<Timestamp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_agent: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UpdateSourceSourceOrderShippingAddress {
#[serde(skip_serializing_if = "Option::is_none")]
pub city: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
pub line1: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub line2: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postal_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CreateSourceSourceOrderItemsType {
Discount,
Shipping,
Sku,
Tax,
}
impl CreateSourceSourceOrderItemsType {
pub fn as_str(self) -> &'static str {
match self {
CreateSourceSourceOrderItemsType::Discount => "discount",
CreateSourceSourceOrderItemsType::Shipping => "shipping",
CreateSourceSourceOrderItemsType::Sku => "sku",
CreateSourceSourceOrderItemsType::Tax => "tax",
}
}
}
impl AsRef<str> for CreateSourceSourceOrderItemsType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CreateSourceSourceOrderItemsType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceAcceptanceParamsStatus {
Accepted,
Pending,
Refused,
Revoked,
}
impl SourceAcceptanceParamsStatus {
pub fn as_str(self) -> &'static str {
match self {
SourceAcceptanceParamsStatus::Accepted => "accepted",
SourceAcceptanceParamsStatus::Pending => "pending",
SourceAcceptanceParamsStatus::Refused => "refused",
SourceAcceptanceParamsStatus::Revoked => "revoked",
}
}
}
impl AsRef<str> for SourceAcceptanceParamsStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceAcceptanceParamsStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceAcceptanceParamsType {
Offline,
Online,
}
impl SourceAcceptanceParamsType {
pub fn as_str(self) -> &'static str {
match self {
SourceAcceptanceParamsType::Offline => "offline",
SourceAcceptanceParamsType::Online => "online",
}
}
}
impl AsRef<str> for SourceAcceptanceParamsType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceAcceptanceParamsType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceFlow {
CodeVerification,
None,
Receiver,
Redirect,
}
impl SourceFlow {
pub fn as_str(self) -> &'static str {
match self {
SourceFlow::CodeVerification => "code_verification",
SourceFlow::None => "none",
SourceFlow::Receiver => "receiver",
SourceFlow::Redirect => "redirect",
}
}
}
impl AsRef<str> for SourceFlow {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceFlow {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceMandateInterval {
OneTime,
Scheduled,
Variable,
}
impl SourceMandateInterval {
pub fn as_str(self) -> &'static str {
match self {
SourceMandateInterval::OneTime => "one_time",
SourceMandateInterval::Scheduled => "scheduled",
SourceMandateInterval::Variable => "variable",
}
}
}
impl AsRef<str> for SourceMandateInterval {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceMandateInterval {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceMandateNotificationMethod {
DeprecatedNone,
Email,
Manual,
None,
StripeEmail,
}
impl SourceMandateNotificationMethod {
pub fn as_str(self) -> &'static str {
match self {
SourceMandateNotificationMethod::DeprecatedNone => "deprecated_none",
SourceMandateNotificationMethod::Email => "email",
SourceMandateNotificationMethod::Manual => "manual",
SourceMandateNotificationMethod::None => "none",
SourceMandateNotificationMethod::StripeEmail => "stripe_email",
}
}
}
impl AsRef<str> for SourceMandateNotificationMethod {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceMandateNotificationMethod {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceRefundNotificationMethod {
Email,
Manual,
None,
}
impl SourceRefundNotificationMethod {
pub fn as_str(self) -> &'static str {
match self {
SourceRefundNotificationMethod::Email => "email",
SourceRefundNotificationMethod::Manual => "manual",
SourceRefundNotificationMethod::None => "none",
}
}
}
impl AsRef<str> for SourceRefundNotificationMethod {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceRefundNotificationMethod {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum SourceType {
AchCreditTransfer,
AchDebit,
Alipay,
Bancontact,
Card,
CardPresent,
Eps,
Giropay,
Ideal,
Klarna,
Multibanco,
P24,
SepaDebit,
Sofort,
ThreeDSecure,
Wechat,
}
impl SourceType {
pub fn as_str(self) -> &'static str {
match self {
SourceType::AchCreditTransfer => "ach_credit_transfer",
SourceType::AchDebit => "ach_debit",
SourceType::Alipay => "alipay",
SourceType::Bancontact => "bancontact",
SourceType::Card => "card",
SourceType::CardPresent => "card_present",
SourceType::Eps => "eps",
SourceType::Giropay => "giropay",
SourceType::Ideal => "ideal",
SourceType::Klarna => "klarna",
SourceType::Multibanco => "multibanco",
SourceType::P24 => "p24",
SourceType::SepaDebit => "sepa_debit",
SourceType::Sofort => "sofort",
SourceType::ThreeDSecure => "three_d_secure",
SourceType::Wechat => "wechat",
}
}
}
impl AsRef<str> for SourceType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum UpdateSourceSourceOrderItemsType {
Discount,
Shipping,
Sku,
Tax,
}
impl UpdateSourceSourceOrderItemsType {
pub fn as_str(self) -> &'static str {
match self {
UpdateSourceSourceOrderItemsType::Discount => "discount",
UpdateSourceSourceOrderItemsType::Shipping => "shipping",
UpdateSourceSourceOrderItemsType::Sku => "sku",
UpdateSourceSourceOrderItemsType::Tax => "tax",
}
}
}
impl AsRef<str> for UpdateSourceSourceOrderItemsType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for UpdateSourceSourceOrderItemsType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}