use crate::ids::{TreasuryCreditReversalId};
use crate::params::{Expandable, Metadata, Object, Timestamp};
use crate::resources::{Currency, TreasuryTransaction};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryCreditReversal {
pub id: TreasuryCreditReversalId,
pub amount: i64,
pub created: Timestamp,
pub currency: Currency,
pub financial_account: String,
pub hosted_regulatory_receipt_url: Option<String>,
pub livemode: bool,
pub metadata: Metadata,
pub network: TreasuryCreditReversalNetwork,
pub received_credit: String,
pub status: TreasuryCreditReversalStatus,
pub status_transitions: TreasuryReceivedCreditsResourceStatusTransitions,
pub transaction: Option<Expandable<TreasuryTransaction>>,
}
impl Object for TreasuryCreditReversal {
type Id = TreasuryCreditReversalId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.credit_reversal"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryReceivedCreditsResourceStatusTransitions {
pub posted_at: Option<Timestamp>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryCreditReversalNetwork {
Ach,
Stripe,
}
impl TreasuryCreditReversalNetwork {
pub fn as_str(self) -> &'static str {
match self {
TreasuryCreditReversalNetwork::Ach => "ach",
TreasuryCreditReversalNetwork::Stripe => "stripe",
}
}
}
impl AsRef<str> for TreasuryCreditReversalNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryCreditReversalNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryCreditReversalNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryCreditReversalStatus {
Canceled,
Posted,
Processing,
}
impl TreasuryCreditReversalStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryCreditReversalStatus::Canceled => "canceled",
TreasuryCreditReversalStatus::Posted => "posted",
TreasuryCreditReversalStatus::Processing => "processing",
}
}
}
impl AsRef<str> for TreasuryCreditReversalStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryCreditReversalStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryCreditReversalStatus {
fn default() -> Self {
Self::Canceled
}
}