use crate::ids::{FinancialConnectionsAccountId};
use crate::params::{Expandable, Object, Timestamp};
use crate::resources::{BankConnectionsResourceAccountholder, FinancialConnectionsAccountOwnership};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct FinancialConnectionsAccount {
pub id: FinancialConnectionsAccountId,
pub account_holder: Option<BankConnectionsResourceAccountholder>,
pub balance: Option<BankConnectionsResourceBalance>,
pub balance_refresh: Option<BankConnectionsResourceBalanceRefresh>,
pub category: FinancialConnectionsAccountCategory,
pub created: Timestamp,
pub display_name: Option<String>,
pub institution_name: String,
pub last4: Option<String>,
pub livemode: bool,
pub ownership: Option<Expandable<FinancialConnectionsAccountOwnership>>,
pub ownership_refresh: Option<BankConnectionsResourceOwnershipRefresh>,
pub permissions: Option<Vec<FinancialConnectionsAccountPermissions>>,
pub status: FinancialConnectionsAccountStatus,
pub subcategory: FinancialConnectionsAccountSubcategory,
pub subscriptions: Option<Vec<FinancialConnectionsAccountSubscriptions>>,
pub supported_payment_method_types: Vec<FinancialConnectionsAccountSupportedPaymentMethodTypes>,
pub transaction_refresh: Option<BankConnectionsResourceTransactionRefresh>,
}
impl Object for FinancialConnectionsAccount {
type Id = FinancialConnectionsAccountId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"financial_connections.account"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceBalance {
pub as_of: Timestamp,
#[serde(skip_serializing_if = "Option::is_none")]
pub cash: Option<BankConnectionsResourceBalanceApiResourceCashBalance>,
#[serde(skip_serializing_if = "Option::is_none")]
pub credit: Option<BankConnectionsResourceBalanceApiResourceCreditBalance>,
pub current: i64,
#[serde(rename = "type")]
pub type_: BankConnectionsResourceBalanceType,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceBalanceApiResourceCashBalance {
pub available: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceBalanceApiResourceCreditBalance {
pub used: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceBalanceRefresh {
pub last_attempted_at: Timestamp,
pub next_refresh_available_at: Option<Timestamp>,
pub status: BankConnectionsResourceBalanceRefreshStatus,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceOwnershipRefresh {
pub last_attempted_at: Timestamp,
pub status: BankConnectionsResourceOwnershipRefreshStatus,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceTransactionRefresh {
pub id: String,
pub last_attempted_at: Timestamp,
pub next_refresh_available_at: Option<Timestamp>,
pub status: BankConnectionsResourceTransactionRefreshStatus,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BankConnectionsResourceBalanceRefreshStatus {
Failed,
Pending,
Succeeded,
}
impl BankConnectionsResourceBalanceRefreshStatus {
pub fn as_str(self) -> &'static str {
match self {
BankConnectionsResourceBalanceRefreshStatus::Failed => "failed",
BankConnectionsResourceBalanceRefreshStatus::Pending => "pending",
BankConnectionsResourceBalanceRefreshStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for BankConnectionsResourceBalanceRefreshStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for BankConnectionsResourceBalanceRefreshStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for BankConnectionsResourceBalanceRefreshStatus {
fn default() -> Self {
Self::Failed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BankConnectionsResourceBalanceType {
Cash,
Credit,
}
impl BankConnectionsResourceBalanceType {
pub fn as_str(self) -> &'static str {
match self {
BankConnectionsResourceBalanceType::Cash => "cash",
BankConnectionsResourceBalanceType::Credit => "credit",
}
}
}
impl AsRef<str> for BankConnectionsResourceBalanceType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for BankConnectionsResourceBalanceType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for BankConnectionsResourceBalanceType {
fn default() -> Self {
Self::Cash
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BankConnectionsResourceOwnershipRefreshStatus {
Failed,
Pending,
Succeeded,
}
impl BankConnectionsResourceOwnershipRefreshStatus {
pub fn as_str(self) -> &'static str {
match self {
BankConnectionsResourceOwnershipRefreshStatus::Failed => "failed",
BankConnectionsResourceOwnershipRefreshStatus::Pending => "pending",
BankConnectionsResourceOwnershipRefreshStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for BankConnectionsResourceOwnershipRefreshStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for BankConnectionsResourceOwnershipRefreshStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for BankConnectionsResourceOwnershipRefreshStatus {
fn default() -> Self {
Self::Failed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum BankConnectionsResourceTransactionRefreshStatus {
Failed,
Pending,
Succeeded,
}
impl BankConnectionsResourceTransactionRefreshStatus {
pub fn as_str(self) -> &'static str {
match self {
BankConnectionsResourceTransactionRefreshStatus::Failed => "failed",
BankConnectionsResourceTransactionRefreshStatus::Pending => "pending",
BankConnectionsResourceTransactionRefreshStatus::Succeeded => "succeeded",
}
}
}
impl AsRef<str> for BankConnectionsResourceTransactionRefreshStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for BankConnectionsResourceTransactionRefreshStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for BankConnectionsResourceTransactionRefreshStatus {
fn default() -> Self {
Self::Failed
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountCategory {
Cash,
Credit,
Investment,
Other,
}
impl FinancialConnectionsAccountCategory {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountCategory::Cash => "cash",
FinancialConnectionsAccountCategory::Credit => "credit",
FinancialConnectionsAccountCategory::Investment => "investment",
FinancialConnectionsAccountCategory::Other => "other",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountCategory {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountCategory {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountCategory {
fn default() -> Self {
Self::Cash
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountPermissions {
Balances,
Ownership,
PaymentMethod,
Transactions,
}
impl FinancialConnectionsAccountPermissions {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountPermissions::Balances => "balances",
FinancialConnectionsAccountPermissions::Ownership => "ownership",
FinancialConnectionsAccountPermissions::PaymentMethod => "payment_method",
FinancialConnectionsAccountPermissions::Transactions => "transactions",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountPermissions {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountPermissions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountPermissions {
fn default() -> Self {
Self::Balances
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountStatus {
Active,
Disconnected,
Inactive,
}
impl FinancialConnectionsAccountStatus {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountStatus::Active => "active",
FinancialConnectionsAccountStatus::Disconnected => "disconnected",
FinancialConnectionsAccountStatus::Inactive => "inactive",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountStatus {
fn default() -> Self {
Self::Active
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountSubcategory {
Checking,
CreditCard,
LineOfCredit,
Mortgage,
Other,
Savings,
}
impl FinancialConnectionsAccountSubcategory {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountSubcategory::Checking => "checking",
FinancialConnectionsAccountSubcategory::CreditCard => "credit_card",
FinancialConnectionsAccountSubcategory::LineOfCredit => "line_of_credit",
FinancialConnectionsAccountSubcategory::Mortgage => "mortgage",
FinancialConnectionsAccountSubcategory::Other => "other",
FinancialConnectionsAccountSubcategory::Savings => "savings",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountSubcategory {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountSubcategory {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountSubcategory {
fn default() -> Self {
Self::Checking
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountSubscriptions {
Transactions,
}
impl FinancialConnectionsAccountSubscriptions {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountSubscriptions::Transactions => "transactions",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountSubscriptions {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountSubscriptions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountSubscriptions {
fn default() -> Self {
Self::Transactions
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsAccountSupportedPaymentMethodTypes {
Link,
UsBankAccount,
}
impl FinancialConnectionsAccountSupportedPaymentMethodTypes {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsAccountSupportedPaymentMethodTypes::Link => "link",
FinancialConnectionsAccountSupportedPaymentMethodTypes::UsBankAccount => "us_bank_account",
}
}
}
impl AsRef<str> for FinancialConnectionsAccountSupportedPaymentMethodTypes {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsAccountSupportedPaymentMethodTypes {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsAccountSupportedPaymentMethodTypes {
fn default() -> Self {
Self::Link
}
}