use crate::ids::{TreasuryReceivedDebitId};
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::{Currency, TreasurySharedResourceInitiatingPaymentMethodDetailsInitiatingPaymentMethodDetails, TreasuryTransaction};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedDebit {
pub id: TreasuryReceivedDebitId,
pub amount: i64,
pub created: Timestamp,
pub currency: Currency,
pub description: String,
pub failure_code: Option<TreasuryReceivedDebitFailureCode>,
pub financial_account: Option<String>,
pub hosted_regulatory_receipt_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub initiating_payment_method_details: Option<TreasurySharedResourceInitiatingPaymentMethodDetailsInitiatingPaymentMethodDetails>,
pub linked_flows: TreasuryReceivedDebitsResourceLinkedFlows,
pub livemode: bool,
pub network: TreasuryReceivedDebitNetwork,
pub reversal_details: Option<TreasuryReceivedDebitsResourceReversalDetails>,
pub status: TreasuryReceivedDebitStatus,
pub transaction: Option<Expandable<TreasuryTransaction>>,
}
impl Object for TreasuryReceivedDebit {
type Id = TreasuryReceivedDebitId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.received_debit"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedDebitsResourceLinkedFlows {
pub debit_reversal: Option<String>,
pub inbound_transfer: Option<String>,
pub issuing_authorization: Option<String>,
pub issuing_transaction: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedDebitsResourceReversalDetails {
pub deadline: Option<Timestamp>,
pub restricted_reason: Option<TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedDebitFailureCode {
AccountClosed,
AccountFrozen,
InsufficientFunds,
Other,
}
impl TreasuryReceivedDebitFailureCode {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedDebitFailureCode::AccountClosed => "account_closed",
TreasuryReceivedDebitFailureCode::AccountFrozen => "account_frozen",
TreasuryReceivedDebitFailureCode::InsufficientFunds => "insufficient_funds",
TreasuryReceivedDebitFailureCode::Other => "other",
}
}
}
impl AsRef<str> for TreasuryReceivedDebitFailureCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedDebitFailureCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedDebitFailureCode {
fn default() -> Self {
Self::AccountClosed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedDebitNetwork {
Ach,
Card,
Stripe,
}
impl TreasuryReceivedDebitNetwork {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedDebitNetwork::Ach => "ach",
TreasuryReceivedDebitNetwork::Card => "card",
TreasuryReceivedDebitNetwork::Stripe => "stripe",
}
}
}
impl AsRef<str> for TreasuryReceivedDebitNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedDebitNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedDebitNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedDebitStatus {
Failed,
Succeeded,
}
impl TreasuryReceivedDebitStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedDebitStatus::Failed => "failed",
TreasuryReceivedDebitStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for TreasuryReceivedDebitStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedDebitStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedDebitStatus {
fn default() -> Self {
Self::Failed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason {
AlreadyReversed,
DeadlinePassed,
NetworkRestricted,
Other,
SourceFlowRestricted,
}
impl TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason::AlreadyReversed => "already_reversed",
TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason::DeadlinePassed => "deadline_passed",
TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason::NetworkRestricted => "network_restricted",
TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason::Other => "other",
TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason::SourceFlowRestricted => "source_flow_restricted",
}
}
}
impl AsRef<str> for TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedDebitsResourceReversalDetailsRestrictedReason {
fn default() -> Self {
Self::AlreadyReversed
}
}