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#[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#[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}