stripe/resources/
balance_transaction_ext.rs

1use serde::{Deserialize, Serialize};
2
3use crate::ids::BalanceTransactionSourceId;
4use crate::params::Object;
5use crate::resources::{
6    ApplicationFee, ApplicationFeeRefund, Charge, ConnectCollectionTransfer, Dispute,
7    IssuingAuthorization, IssuingDispute, IssuingTransaction, Payout, PlatformTaxFee, Refund,
8    ReserveTransaction, TaxDeductedAtSource, Topup, Transfer, TransferReversal,
9};
10
11#[derive(Clone, Debug, Deserialize, Serialize)]
12#[serde(untagged, rename_all = "snake_case")]
13pub enum BalanceTransactionSourceUnion {
14    ApplicationFee(ApplicationFee),
15    Charge(Charge),
16    ConnectCollectionTransfer(ConnectCollectionTransfer),
17    Dispute(Dispute),
18    #[serde(rename = "fee_refund")]
19    ApplicationFeeRefund(ApplicationFeeRefund),
20    #[serde(rename = "issuing.authorization")]
21    IssuingAuthorization(IssuingAuthorization),
22    #[serde(rename = "issuing.dispute")]
23    IssuingDispute(IssuingDispute),
24    #[serde(rename = "issuing.transaction")]
25    IssuingTransaction(IssuingTransaction),
26    Payout(Payout),
27    PlatformTaxFee(PlatformTaxFee),
28    Refund(Refund),
29    ReserveTransaction(ReserveTransaction),
30    TaxDeductedAtSource(TaxDeductedAtSource),
31    Topup(Topup),
32    Transfer(Transfer),
33    TransferReversal(TransferReversal),
34}
35impl std::default::Default for BalanceTransactionSourceUnion {
36    fn default() -> Self {
37        Self::ApplicationFee(Default::default())
38    }
39}
40impl Object for BalanceTransactionSourceUnion {
41    type Id = BalanceTransactionSourceId;
42    fn id(&self) -> Self::Id {
43        use BalanceTransactionSourceId as Id;
44        use BalanceTransactionSourceUnion as Source;
45
46        match self {
47            Source::ApplicationFee(x) => Id::ApplicationFee(x.id()),
48            Source::ApplicationFeeRefund(x) => Id::ApplicationFeeRefund(x.id()),
49            Source::Charge(x) => Id::Charge(x.id()),
50            Source::ConnectCollectionTransfer(_) => Id::None,
51            Source::Dispute(x) => Id::Dispute(x.id()),
52            Source::IssuingAuthorization(x) => Id::IssuingAuthorization(x.id()),
53            Source::IssuingDispute(x) => Id::IssuingDispute(x.id()),
54            Source::IssuingTransaction(x) => Id::IssuingTransaction(x.id()),
55            Source::PlatformTaxFee(_) => Id::None,
56            Source::Payout(x) => Id::Payout(x.id()),
57            Source::Refund(x) => Id::Refund(x.id()),
58            Source::ReserveTransaction(_) => Id::None,
59            Source::TaxDeductedAtSource(_) => Id::None,
60            Source::Topup(x) => Id::Topup(x.id()),
61            Source::Transfer(x) => Id::Transfer(x.id()),
62            Source::TransferReversal(x) => Id::TransferReversal(x.id()),
63        }
64    }
65    fn object(&self) -> &'static str {
66        use BalanceTransactionSourceUnion as Source;
67
68        match self {
69            Source::ApplicationFee(x) => x.object(),
70            Source::ApplicationFeeRefund(x) => x.object(),
71            Source::Charge(x) => x.object(),
72            Source::ConnectCollectionTransfer(x) => x.object(),
73            Source::Dispute(x) => x.object(),
74            Source::IssuingAuthorization(x) => x.object(),
75            Source::IssuingDispute(x) => x.object(),
76            Source::IssuingTransaction(x) => x.object(),
77            Source::PlatformTaxFee(x) => x.object(),
78            Source::Payout(x) => x.object(),
79            Source::Refund(x) => x.object(),
80            Source::ReserveTransaction(x) => x.object(),
81            Source::TaxDeductedAtSource(x) => x.object(),
82            Source::Topup(x) => x.object(),
83            Source::Transfer(x) => x.object(),
84            Source::TransferReversal(x) => x.object(),
85        }
86    }
87}
88
89/// An enum representing the possible values of an `BalanceTransaction`'s `status` field.
90#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
91#[serde(rename_all = "snake_case")]
92pub enum BalanceTransactionStatus {
93    Available,
94    Pending,
95}
96
97impl BalanceTransactionStatus {
98    pub fn as_str(self) -> &'static str {
99        match self {
100            BalanceTransactionStatus::Available => "available",
101            BalanceTransactionStatus::Pending => "pending",
102        }
103    }
104}
105
106impl AsRef<str> for BalanceTransactionStatus {
107    fn as_ref(&self) -> &str {
108        self.as_str()
109    }
110}
111
112impl std::fmt::Display for BalanceTransactionStatus {
113    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
114        self.as_str().fmt(f)
115    }
116}
117
118impl std::default::Default for BalanceTransactionStatus {
119    fn default() -> Self {
120        Self::Pending
121    }
122}
123
124/// An enum representing the possible values of an `Fee`'s `type` field.
125#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
126#[serde(rename_all = "snake_case")]
127#[derive(Default)]
128pub enum FeeType {
129    #[default]
130    ApplicationFee,
131    StripeFee,
132    Tax,
133}
134
135impl FeeType {
136    pub fn as_str(self) -> &'static str {
137        match self {
138            FeeType::ApplicationFee => "application_fee",
139            FeeType::StripeFee => "stripe_fee",
140            FeeType::Tax => "tax",
141        }
142    }
143}
144
145impl AsRef<str> for FeeType {
146    fn as_ref(&self) -> &str {
147        self.as_str()
148    }
149}
150
151impl std::fmt::Display for FeeType {
152    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
153        self.as_str().fmt(f)
154    }
155}