use crate::ids::{TreasuryReceivedCreditId};
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::{Currency, Payout, TreasuryCreditReversal, TreasuryOutboundPayment, TreasurySharedResourceInitiatingPaymentMethodDetailsInitiatingPaymentMethodDetails, TreasuryTransaction};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedCredit {
pub id: TreasuryReceivedCreditId,
pub amount: i64,
pub created: Timestamp,
pub currency: Currency,
pub description: String,
pub failure_code: Option<TreasuryReceivedCreditFailureCode>,
pub financial_account: Option<String>,
pub hosted_regulatory_receipt_url: Option<String>,
pub initiating_payment_method_details: TreasurySharedResourceInitiatingPaymentMethodDetailsInitiatingPaymentMethodDetails,
pub linked_flows: TreasuryReceivedCreditsResourceLinkedFlows,
pub livemode: bool,
pub network: TreasuryReceivedCreditNetwork,
pub reversal_details: Option<TreasuryReceivedCreditsResourceReversalDetails>,
pub status: TreasuryReceivedCreditStatus,
pub transaction: Option<Expandable<TreasuryTransaction>>,
}
impl Object for TreasuryReceivedCredit {
type Id = TreasuryReceivedCreditId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.received_credit"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedCreditsResourceLinkedFlows {
pub credit_reversal: Option<String>,
pub issuing_authorization: Option<String>,
pub issuing_transaction: Option<String>,
pub source_flow: Option<String>,
pub source_flow_details: Option<TreasuryReceivedCreditsResourceSourceFlowsDetails>,
pub source_flow_type: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedCreditsResourceReversalDetails {
pub deadline: Option<Timestamp>,
pub restricted_reason: Option<TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedCreditsResourceSourceFlowsDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub credit_reversal: Option<TreasuryCreditReversal>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outbound_payment: Option<TreasuryOutboundPayment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout: Option<Payout>,
#[serde(rename = "type")]
pub type_: TreasuryReceivedCreditsResourceSourceFlowsDetailsType,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedCreditFailureCode {
AccountClosed,
AccountFrozen,
Other,
}
impl TreasuryReceivedCreditFailureCode {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedCreditFailureCode::AccountClosed => "account_closed",
TreasuryReceivedCreditFailureCode::AccountFrozen => "account_frozen",
TreasuryReceivedCreditFailureCode::Other => "other",
}
}
}
impl AsRef<str> for TreasuryReceivedCreditFailureCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedCreditFailureCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedCreditFailureCode {
fn default() -> Self {
Self::AccountClosed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedCreditNetwork {
Ach,
Card,
Stripe,
UsDomesticWire,
}
impl TreasuryReceivedCreditNetwork {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedCreditNetwork::Ach => "ach",
TreasuryReceivedCreditNetwork::Card => "card",
TreasuryReceivedCreditNetwork::Stripe => "stripe",
TreasuryReceivedCreditNetwork::UsDomesticWire => "us_domestic_wire",
}
}
}
impl AsRef<str> for TreasuryReceivedCreditNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedCreditNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedCreditNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedCreditStatus {
Failed,
Succeeded,
}
impl TreasuryReceivedCreditStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedCreditStatus::Failed => "failed",
TreasuryReceivedCreditStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for TreasuryReceivedCreditStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedCreditStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedCreditStatus {
fn default() -> Self {
Self::Failed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason {
AlreadyReversed,
DeadlinePassed,
NetworkRestricted,
Other,
SourceFlowRestricted,
}
impl TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason::AlreadyReversed => "already_reversed",
TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason::DeadlinePassed => "deadline_passed",
TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason::NetworkRestricted => "network_restricted",
TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason::Other => "other",
TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason::SourceFlowRestricted => "source_flow_restricted",
}
}
}
impl AsRef<str> for TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedCreditsResourceReversalDetailsRestrictedReason {
fn default() -> Self {
Self::AlreadyReversed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryReceivedCreditsResourceSourceFlowsDetailsType {
CreditReversal,
Other,
OutboundPayment,
Payout,
}
impl TreasuryReceivedCreditsResourceSourceFlowsDetailsType {
pub fn as_str(self) -> &'static str {
match self {
TreasuryReceivedCreditsResourceSourceFlowsDetailsType::CreditReversal => "credit_reversal",
TreasuryReceivedCreditsResourceSourceFlowsDetailsType::Other => "other",
TreasuryReceivedCreditsResourceSourceFlowsDetailsType::OutboundPayment => "outbound_payment",
TreasuryReceivedCreditsResourceSourceFlowsDetailsType::Payout => "payout",
}
}
}
impl AsRef<str> for TreasuryReceivedCreditsResourceSourceFlowsDetailsType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryReceivedCreditsResourceSourceFlowsDetailsType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryReceivedCreditsResourceSourceFlowsDetailsType {
fn default() -> Self {
Self::CreditReversal
}
}