use crate::config::{Client, Response};
use crate::ids::{CustomerId, SourceId, TokenId};
use crate::params::{Expand, Metadata, Object, Timestamp};
use crate::resources::{Address, BillingDetails, Currency};
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>,
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 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 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 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 native_url: Option<String>,
#[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 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>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage: Option<SourceUsage>,
}
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(),
statement_descriptor: Default::default(),
token: Default::default(),
type_: Default::default(),
usage: Default::default(),
}
}
}
#[derive(Clone, Debug, Serialize, Default)]
pub struct UpdateSource<'a> {
#[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>,
}
impl<'a> UpdateSource<'a> {
pub fn new() -> Self {
UpdateSource {
expand: Default::default(),
mandate: Default::default(),
metadata: Default::default(),
owner: 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 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 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 SourceAcceptanceOfflineParams {
pub contact_email: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SourceAcceptanceOnlineParams {
pub date: Timestamp,
pub ip: String,
pub user_agent: String,
}
#[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 SourceRedirectFlowFailureReason {
Declined,
ProcessingError,
UserAbort,
}
impl SourceRedirectFlowFailureReason {
pub fn as_str(self) -> &'static str {
match self {
SourceRedirectFlowFailureReason::Declined => "declined",
SourceRedirectFlowFailureReason::ProcessingError => "processing_error",
SourceRedirectFlowFailureReason::UserAbort => "user_abort",
}
}
}
impl AsRef<str> for SourceRedirectFlowFailureReason {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceRedirectFlowFailureReason {
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 SourceRedirectFlowStatus {
Failed,
NotRequired,
Pending,
Succeeded,
}
impl SourceRedirectFlowStatus {
pub fn as_str(self) -> &'static str {
match self {
SourceRedirectFlowStatus::Failed => "failed",
SourceRedirectFlowStatus::NotRequired => "not_required",
SourceRedirectFlowStatus::Pending => "pending",
SourceRedirectFlowStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for SourceRedirectFlowStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceRedirectFlowStatus {
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 SourceStatus {
Canceled,
Chargeable,
Consumed,
Failed,
Pending,
}
impl SourceStatus {
pub fn as_str(self) -> &'static str {
match self {
SourceStatus::Canceled => "canceled",
SourceStatus::Chargeable => "chargeable",
SourceStatus::Consumed => "consumed",
SourceStatus::Failed => "failed",
SourceStatus::Pending => "pending",
}
}
}
impl AsRef<str> for SourceStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceStatus {
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,
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::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 SourceUsage {
Reusable,
SingleUse,
}
impl SourceUsage {
pub fn as_str(self) -> &'static str {
match self {
SourceUsage::Reusable => "reusable",
SourceUsage::SingleUse => "single_use",
}
}
}
impl AsRef<str> for SourceUsage {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for SourceUsage {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}