use crate::ids::{TreasuryOutboundTransferId};
use crate::params::{Expandable, Metadata, Object, Timestamp};
use crate::resources::{Currency, TreasurySharedResourceBillingDetails, TreasuryTransaction};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryOutboundTransfer {
pub id: TreasuryOutboundTransferId,
pub amount: i64,
pub cancelable: bool,
pub created: Timestamp,
pub currency: Currency,
pub description: Option<String>,
pub destination_payment_method: Option<String>,
pub destination_payment_method_details: OutboundTransfersPaymentMethodDetails,
pub expected_arrival_date: Timestamp,
pub financial_account: String,
pub hosted_regulatory_receipt_url: Option<String>,
pub livemode: bool,
pub metadata: Metadata,
pub returned_details: Option<TreasuryOutboundTransfersResourceReturnedDetails>,
pub statement_descriptor: String,
pub status: TreasuryOutboundTransferStatus,
pub status_transitions: TreasuryOutboundTransfersResourceStatusTransitions,
pub transaction: Expandable<TreasuryTransaction>,
}
impl Object for TreasuryOutboundTransfer {
type Id = TreasuryOutboundTransferId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"treasury.outbound_transfer"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct OutboundTransfersPaymentMethodDetails {
pub billing_details: TreasurySharedResourceBillingDetails,
#[serde(rename = "type")]
pub type_: OutboundTransfersPaymentMethodDetailsType,
#[serde(skip_serializing_if = "Option::is_none")]
pub us_bank_account: Option<OutboundTransfersPaymentMethodDetailsUsBankAccount>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct OutboundTransfersPaymentMethodDetailsUsBankAccount {
pub account_holder_type: Option<OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType>,
pub account_type: Option<OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType>,
pub bank_name: Option<String>,
pub fingerprint: Option<String>,
pub last4: Option<String>,
pub network: OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork,
pub routing_number: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryOutboundTransfersResourceReturnedDetails {
pub code: TreasuryOutboundTransfersResourceReturnedDetailsCode,
pub transaction: Expandable<TreasuryTransaction>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct TreasuryOutboundTransfersResourceStatusTransitions {
pub canceled_at: Option<Timestamp>,
pub failed_at: Option<Timestamp>,
pub posted_at: Option<Timestamp>,
pub returned_at: Option<Timestamp>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum OutboundTransfersPaymentMethodDetailsType {
UsBankAccount,
}
impl OutboundTransfersPaymentMethodDetailsType {
pub fn as_str(self) -> &'static str {
match self {
OutboundTransfersPaymentMethodDetailsType::UsBankAccount => "us_bank_account",
}
}
}
impl AsRef<str> for OutboundTransfersPaymentMethodDetailsType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for OutboundTransfersPaymentMethodDetailsType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for OutboundTransfersPaymentMethodDetailsType {
fn default() -> Self {
Self::UsBankAccount
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType {
Company,
Individual,
}
impl OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType {
pub fn as_str(self) -> &'static str {
match self {
OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType::Company => "company",
OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType::Individual => "individual",
}
}
}
impl AsRef<str> for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountHolderType {
fn default() -> Self {
Self::Company
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType {
Checking,
Savings,
}
impl OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType {
pub fn as_str(self) -> &'static str {
match self {
OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType::Checking => "checking",
OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType::Savings => "savings",
}
}
}
impl AsRef<str> for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for OutboundTransfersPaymentMethodDetailsUsBankAccountAccountType {
fn default() -> Self {
Self::Checking
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork {
Ach,
UsDomesticWire,
}
impl OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork {
pub fn as_str(self) -> &'static str {
match self {
OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork::Ach => "ach",
OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork::UsDomesticWire => "us_domestic_wire",
}
}
}
impl AsRef<str> for OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for OutboundTransfersPaymentMethodDetailsUsBankAccountNetwork {
fn default() -> Self {
Self::Ach
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryOutboundTransferStatus {
Canceled,
Failed,
Posted,
Processing,
Returned,
}
impl TreasuryOutboundTransferStatus {
pub fn as_str(self) -> &'static str {
match self {
TreasuryOutboundTransferStatus::Canceled => "canceled",
TreasuryOutboundTransferStatus::Failed => "failed",
TreasuryOutboundTransferStatus::Posted => "posted",
TreasuryOutboundTransferStatus::Processing => "processing",
TreasuryOutboundTransferStatus::Returned => "returned",
}
}
}
impl AsRef<str> for TreasuryOutboundTransferStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryOutboundTransferStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryOutboundTransferStatus {
fn default() -> Self {
Self::Canceled
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TreasuryOutboundTransfersResourceReturnedDetailsCode {
AccountClosed,
AccountFrozen,
BankAccountRestricted,
BankOwnershipChanged,
Declined,
IncorrectAccountHolderName,
InvalidAccountNumber,
InvalidCurrency,
NoAccount,
Other,
}
impl TreasuryOutboundTransfersResourceReturnedDetailsCode {
pub fn as_str(self) -> &'static str {
match self {
TreasuryOutboundTransfersResourceReturnedDetailsCode::AccountClosed => "account_closed",
TreasuryOutboundTransfersResourceReturnedDetailsCode::AccountFrozen => "account_frozen",
TreasuryOutboundTransfersResourceReturnedDetailsCode::BankAccountRestricted => "bank_account_restricted",
TreasuryOutboundTransfersResourceReturnedDetailsCode::BankOwnershipChanged => "bank_ownership_changed",
TreasuryOutboundTransfersResourceReturnedDetailsCode::Declined => "declined",
TreasuryOutboundTransfersResourceReturnedDetailsCode::IncorrectAccountHolderName => "incorrect_account_holder_name",
TreasuryOutboundTransfersResourceReturnedDetailsCode::InvalidAccountNumber => "invalid_account_number",
TreasuryOutboundTransfersResourceReturnedDetailsCode::InvalidCurrency => "invalid_currency",
TreasuryOutboundTransfersResourceReturnedDetailsCode::NoAccount => "no_account",
TreasuryOutboundTransfersResourceReturnedDetailsCode::Other => "other",
}
}
}
impl AsRef<str> for TreasuryOutboundTransfersResourceReturnedDetailsCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for TreasuryOutboundTransfersResourceReturnedDetailsCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for TreasuryOutboundTransfersResourceReturnedDetailsCode {
fn default() -> Self {
Self::AccountClosed
}
}