use crate::ids::{TreasuryTransactionId};
use crate::params::{List, Object, Timestamp};
use crate::resources::{Currency, TreasuryTransactionEntry, TreasuryTransactionsResourceBalanceImpact, TreasuryTransactionsResourceFlowDetails};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryTransaction {
pub id: TreasuryTransactionId,
pub amount: i64,
pub balance_impact: TreasuryTransactionsResourceBalanceImpact,
pub created: Timestamp,
pub currency: Currency,
pub description: String,
pub entries: Option<List<TreasuryTransactionEntry>>,
pub financial_account: String,
pub flow: Option<String>,
pub flow_details: Option<TreasuryTransactionsResourceFlowDetails>,
pub flow_type: TreasuryTransactionFlowType,
pub livemode: bool,
pub status: TreasuryTransactionStatus,
pub status_transitions: TreasuryTransactionsResourceAbstractTransactionResourceStatusTransitions,
}
impl Object for TreasuryTransaction {
type Id = TreasuryTransactionId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.transaction"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryTransactionsResourceAbstractTransactionResourceStatusTransitions {
pub posted_at: Option<Timestamp>,
pub void_at: Option<Timestamp>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryTransactionFlowType {
CreditReversal,
DebitReversal,
InboundTransfer,
IssuingAuthorization,
Other,
OutboundPayment,
OutboundTransfer,
ReceivedCredit,
ReceivedDebit,
}
impl TreasuryTransactionFlowType {
pub fn as_str(self) -> &'static str {
match self {
TreasuryTransactionFlowType::CreditReversal => "credit_reversal",
TreasuryTransactionFlowType::DebitReversal => "debit_reversal",
TreasuryTransactionFlowType::InboundTransfer => "inbound_transfer",
TreasuryTransactionFlowType::IssuingAuthorization => "issuing_authorization",
TreasuryTransactionFlowType::Other => "other",
TreasuryTransactionFlowType::OutboundPayment => "outbound_payment",
TreasuryTransactionFlowType::OutboundTransfer => "outbound_transfer",
TreasuryTransactionFlowType::ReceivedCredit => "received_credit",
TreasuryTransactionFlowType::ReceivedDebit => "received_debit",
}
}
}
impl AsRef<str> for TreasuryTransactionFlowType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryTransactionFlowType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryTransactionFlowType {
fn default() -> Self {
Self::CreditReversal
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryTransactionStatus {
Open,
Posted,
Void,
}
impl TreasuryTransactionStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryTransactionStatus::Open => "open",
TreasuryTransactionStatus::Posted => "posted",
TreasuryTransactionStatus::Void => "void",
}
}
}
impl AsRef<str> for TreasuryTransactionStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryTransactionStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryTransactionStatus {
fn default() -> Self {
Self::Open
}
}