use crate::ids::{CustomerCashBalanceTransactionId};
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::{BalanceTransaction, Currency, Customer, PaymentIntent, Refund};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerCashBalanceTransaction {
pub id: CustomerCashBalanceTransactionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub adjusted_for_overdraft: Option<CustomerBalanceResourceCashBalanceTransactionResourceAdjustedForOverdraft>,
#[serde(skip_serializing_if = "Option::is_none")]
pub applied_to_payment: Option<CustomerBalanceResourceCashBalanceTransactionResourceAppliedToPaymentTransaction>,
pub created: Timestamp,
pub currency: Currency,
pub customer: Expandable<Customer>,
pub ending_balance: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub funded: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransaction>,
pub livemode: bool,
pub net_amount: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub refunded_from_payment: Option<CustomerBalanceResourceCashBalanceTransactionResourceRefundedFromPaymentTransaction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transferred_to_balance: Option<CustomerBalanceResourceCashBalanceTransactionResourceTransferredToBalance>,
#[serde(rename = "type")]
pub type_: CustomerCashBalanceTransactionType,
#[serde(skip_serializing_if = "Option::is_none")]
pub unapplied_from_payment: Option<CustomerBalanceResourceCashBalanceTransactionResourceUnappliedFromPaymentTransaction>,
}
impl Object for CustomerCashBalanceTransaction {
type Id = CustomerCashBalanceTransactionId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"customer_cash_balance_transaction"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceAdjustedForOverdraft {
pub balance_transaction: Expandable<BalanceTransaction>,
pub linked_transaction: Expandable<CustomerCashBalanceTransaction>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceAppliedToPaymentTransaction {
pub payment_intent: Expandable<PaymentIntent>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransaction {
pub bank_transfer: CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransfer,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransfer {
#[serde(skip_serializing_if = "Option::is_none")]
pub eu_bank_transfer: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceEuBankTransfer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gb_bank_transfer: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceGbBankTransfer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub jp_bank_transfer: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceJpBankTransfer>,
pub reference: Option<String>,
#[serde(rename = "type")]
pub type_: CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType,
#[serde(skip_serializing_if = "Option::is_none")]
pub us_bank_transfer: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransfer>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceEuBankTransfer {
pub bic: Option<String>,
pub iban_last4: Option<String>,
pub sender_name: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceGbBankTransfer {
pub account_number_last4: Option<String>,
pub sender_name: Option<String>,
pub sort_code: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceJpBankTransfer {
pub sender_bank: Option<String>,
pub sender_branch: Option<String>,
pub sender_name: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransfer {
#[serde(skip_serializing_if = "Option::is_none")]
pub network: Option<CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork>,
pub sender_name: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceRefundedFromPaymentTransaction {
pub refund: Expandable<Refund>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceTransferredToBalance {
pub balance_transaction: Expandable<BalanceTransaction>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CustomerBalanceResourceCashBalanceTransactionResourceUnappliedFromPaymentTransaction {
pub payment_intent: Expandable<PaymentIntent>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork {
Ach,
DomesticWireUs,
Swift,
}
impl CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork {
pub fn as_str(self) -> &'static str {
match self {
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork::Ach => "ach",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork::DomesticWireUs => "domestic_wire_us",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork::Swift => "swift",
}
}
}
impl AsRef<str> for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferResourceUsBankTransferNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType {
EuBankTransfer,
GbBankTransfer,
JpBankTransfer,
MxBankTransfer,
UsBankTransfer,
}
impl CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType {
pub fn as_str(self) -> &'static str {
match self {
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType::EuBankTransfer => "eu_bank_transfer",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType::GbBankTransfer => "gb_bank_transfer",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType::JpBankTransfer => "jp_bank_transfer",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType::MxBankTransfer => "mx_bank_transfer",
CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType::UsBankTransfer => "us_bank_transfer",
}
}
}
impl AsRef<str> for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CustomerBalanceResourceCashBalanceTransactionResourceFundedTransactionResourceBankTransferType {
fn default() -> Self {
Self::EuBankTransfer
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CustomerCashBalanceTransactionType {
AdjustedForOverdraft,
AppliedToPayment,
Funded,
FundingReversed,
RefundedFromPayment,
ReturnCanceled,
ReturnInitiated,
TransferredToBalance,
UnappliedFromPayment,
}
impl CustomerCashBalanceTransactionType {
pub fn as_str(self) -> &'static str {
match self {
CustomerCashBalanceTransactionType::AdjustedForOverdraft => "adjusted_for_overdraft",
CustomerCashBalanceTransactionType::AppliedToPayment => "applied_to_payment",
CustomerCashBalanceTransactionType::Funded => "funded",
CustomerCashBalanceTransactionType::FundingReversed => "funding_reversed",
CustomerCashBalanceTransactionType::RefundedFromPayment => "refunded_from_payment",
CustomerCashBalanceTransactionType::ReturnCanceled => "return_canceled",
CustomerCashBalanceTransactionType::ReturnInitiated => "return_initiated",
CustomerCashBalanceTransactionType::TransferredToBalance => "transferred_to_balance",
CustomerCashBalanceTransactionType::UnappliedFromPayment => "unapplied_from_payment",
}
}
}
impl AsRef<str> for CustomerCashBalanceTransactionType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CustomerCashBalanceTransactionType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CustomerCashBalanceTransactionType {
fn default() -> Self {
Self::AdjustedForOverdraft
}
}