mercury_rust/resources/
accounts.rs

1use chrono::{DateTime, Utc};
2use crate::client::Client;
3use crate::resources::List;
4
5#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
6#[serde(rename_all="camelCase")]
7pub struct Account {
8    pub account_number: String,
9    pub available_balance: f32,
10    pub created_at: DateTime<Utc>,
11    pub current_balance: f32,
12    pub id: String,
13    pub kind: AccountKind,
14    pub name: String,
15    pub routing_number: String,
16    pub status: AccountStatus,
17    pub r#type: AccountType,
18    pub can_receive_transactions: Option<bool>,
19    pub nickname: Option<String>,
20    pub legal_business_name: String,
21}
22
23#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
24#[serde(rename_all="lowercase")]
25pub enum AccountKind {
26    Checking,
27    Savings
28}
29
30#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
31#[serde(rename_all="lowercase")]
32pub enum AccountStatus {
33    Active,
34    Deleted,
35    Pending
36}
37
38#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
39#[serde(rename_all="lowercase")]
40pub enum AccountType {
41    Mercury,
42    External,
43    Recipient
44}
45
46impl Account {
47
48    pub async fn list(client: &Client) -> crate::Result<List<Self>> {
49        client.get("/accounts", vec![], serde_json::Map::new()).await
50    }
51
52    pub async fn retrieve(client: &Client, id: &str) -> crate::Result<Self> {
53        client.get("/account", vec![id], serde_json::Map::new()).await
54    }
55
56}