use crate::client::{Client, Response};
use crate::ids::{FinancialConnectionsSessionId};
use crate::params::{Expand, List, Object};
use crate::resources::{BankConnectionsResourceAccountholder, FinancialConnectionsAccount};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct FinancialConnectionsSession {
pub id: FinancialConnectionsSessionId,
pub account_holder: Option<BankConnectionsResourceAccountholder>,
pub accounts: List<FinancialConnectionsAccount>,
pub client_secret: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<BankConnectionsResourceLinkAccountSessionFilters>,
pub livemode: bool,
pub permissions: Vec<FinancialConnectionsSessionPermissions>,
pub prefetch: Option<Vec<FinancialConnectionsSessionPrefetch>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_url: Option<String>,
}
impl FinancialConnectionsSession {
pub fn create(client: &Client, params: CreateFinancialConnectionsSession<'_>) -> Response<FinancialConnectionsSession> {
#[allow(clippy::needless_borrows_for_generic_args)]
client.post_form("/financial_connections/sessions", ¶ms)
}
}
impl Object for FinancialConnectionsSession {
type Id = FinancialConnectionsSessionId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"financial_connections.session"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct BankConnectionsResourceLinkAccountSessionFilters {
pub countries: Option<Vec<String>>,
}
#[derive(Clone, Debug, Serialize)]
pub struct CreateFinancialConnectionsSession<'a> {
pub account_holder: CreateFinancialConnectionsSessionAccountHolder,
#[serde(skip_serializing_if = "Expand::is_empty")]
pub expand: &'a [&'a str],
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<CreateFinancialConnectionsSessionFilters>,
pub permissions: Vec<CreateFinancialConnectionsSessionPermissions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prefetch: Option<Vec<CreateFinancialConnectionsSessionPrefetch>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_url: Option<&'a str>,
}
impl<'a> CreateFinancialConnectionsSession<'a> {
pub fn new(account_holder: CreateFinancialConnectionsSessionAccountHolder, permissions: Vec<CreateFinancialConnectionsSessionPermissions>) -> Self {
CreateFinancialConnectionsSession {
account_holder,
expand: Default::default(),
filters: Default::default(),
permissions,
prefetch: Default::default(),
return_url: Default::default(),
}
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CreateFinancialConnectionsSessionAccountHolder {
#[serde(skip_serializing_if = "Option::is_none")]
pub account: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer: Option<String>,
#[serde(rename = "type")]
pub type_: CreateFinancialConnectionsSessionAccountHolderType,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct CreateFinancialConnectionsSessionFilters {
pub countries: Vec<String>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CreateFinancialConnectionsSessionAccountHolderType {
Account,
Customer,
}
impl CreateFinancialConnectionsSessionAccountHolderType {
pub fn as_str(self) -> &'static str {
match self {
CreateFinancialConnectionsSessionAccountHolderType::Account => "account",
CreateFinancialConnectionsSessionAccountHolderType::Customer => "customer",
}
}
}
impl AsRef<str> for CreateFinancialConnectionsSessionAccountHolderType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CreateFinancialConnectionsSessionAccountHolderType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CreateFinancialConnectionsSessionAccountHolderType {
fn default() -> Self {
Self::Account
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CreateFinancialConnectionsSessionPermissions {
Balances,
Ownership,
PaymentMethod,
Transactions,
}
impl CreateFinancialConnectionsSessionPermissions {
pub fn as_str(self) -> &'static str {
match self {
CreateFinancialConnectionsSessionPermissions::Balances => "balances",
CreateFinancialConnectionsSessionPermissions::Ownership => "ownership",
CreateFinancialConnectionsSessionPermissions::PaymentMethod => "payment_method",
CreateFinancialConnectionsSessionPermissions::Transactions => "transactions",
}
}
}
impl AsRef<str> for CreateFinancialConnectionsSessionPermissions {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CreateFinancialConnectionsSessionPermissions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CreateFinancialConnectionsSessionPermissions {
fn default() -> Self {
Self::Balances
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CreateFinancialConnectionsSessionPrefetch {
Balances,
Ownership,
Transactions,
}
impl CreateFinancialConnectionsSessionPrefetch {
pub fn as_str(self) -> &'static str {
match self {
CreateFinancialConnectionsSessionPrefetch::Balances => "balances",
CreateFinancialConnectionsSessionPrefetch::Ownership => "ownership",
CreateFinancialConnectionsSessionPrefetch::Transactions => "transactions",
}
}
}
impl AsRef<str> for CreateFinancialConnectionsSessionPrefetch {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for CreateFinancialConnectionsSessionPrefetch {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for CreateFinancialConnectionsSessionPrefetch {
fn default() -> Self {
Self::Balances
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsSessionPermissions {
Balances,
Ownership,
PaymentMethod,
Transactions,
}
impl FinancialConnectionsSessionPermissions {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsSessionPermissions::Balances => "balances",
FinancialConnectionsSessionPermissions::Ownership => "ownership",
FinancialConnectionsSessionPermissions::PaymentMethod => "payment_method",
FinancialConnectionsSessionPermissions::Transactions => "transactions",
}
}
}
impl AsRef<str> for FinancialConnectionsSessionPermissions {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsSessionPermissions {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsSessionPermissions {
fn default() -> Self {
Self::Balances
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FinancialConnectionsSessionPrefetch {
Balances,
Ownership,
Transactions,
}
impl FinancialConnectionsSessionPrefetch {
pub fn as_str(self) -> &'static str {
match self {
FinancialConnectionsSessionPrefetch::Balances => "balances",
FinancialConnectionsSessionPrefetch::Ownership => "ownership",
FinancialConnectionsSessionPrefetch::Transactions => "transactions",
}
}
}
impl AsRef<str> for FinancialConnectionsSessionPrefetch {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for FinancialConnectionsSessionPrefetch {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for FinancialConnectionsSessionPrefetch {
fn default() -> Self {
Self::Balances
}
}