use crate::ids::{TreasuryDebitReversalId};
use crate::params::{Expandable, Metadata, Object, Timestamp};
use crate::resources::{Currency, TreasuryTransaction};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryDebitReversal {
pub id: TreasuryDebitReversalId,
pub amount: i64,
pub created: Timestamp,
pub currency: Currency,
pub financial_account: Option<String>,
pub hosted_regulatory_receipt_url: Option<String>,
pub linked_flows: Option<TreasuryReceivedDebitsResourceDebitReversalLinkedFlows>,
pub livemode: bool,
pub metadata: Metadata,
pub network: TreasuryDebitReversalNetwork,
pub received_debit: String,
pub status: TreasuryDebitReversalStatus,
pub status_transitions: TreasuryReceivedDebitsResourceStatusTransitions,
pub transaction: Option<Expandable<TreasuryTransaction>>,
}
impl Object for TreasuryDebitReversal {
type Id = TreasuryDebitReversalId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.debit_reversal"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedDebitsResourceDebitReversalLinkedFlows {
pub issuing_dispute: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedDebitsResourceStatusTransitions {
pub completed_at: Option<Timestamp>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryDebitReversalNetwork {
Ach,
Card,
}
impl TreasuryDebitReversalNetwork {
pub fn as_str(self) -> &'static str {
match self {
TreasuryDebitReversalNetwork::Ach => "ach",
TreasuryDebitReversalNetwork::Card => "card",
}
}
}
impl AsRef<str> for TreasuryDebitReversalNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryDebitReversalNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryDebitReversalNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryDebitReversalStatus {
Failed,
Processing,
Succeeded,
}
impl TreasuryDebitReversalStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryDebitReversalStatus::Failed => "failed",
TreasuryDebitReversalStatus::Processing => "processing",
TreasuryDebitReversalStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for TreasuryDebitReversalStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryDebitReversalStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryDebitReversalStatus {
fn default() -> Self {
Self::Failed
}
}