// src/api/models.rs // This file contains all the data structures for the banking API. // These are the "nouns" of our API interaction. use serde::{Deserialize, Serialize}; use chrono::{DateTime, Utc, NaiveDate}; // --- Generic API Wrappers --- #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here pub struct ApiResponse { pub data: T, pub links: Links, pub meta: Meta, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct Links { #[serde(rename = "self")] pub self_link: String, pub next: Option, pub prev: Option, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct Meta { pub total_pages: Option, pub total_records: Option, pub current_page: Option, pub page_size: Option, } // --- Consent Models --- #[derive(Debug, Serialize, Clone)] #[serde(rename_all = "snake_case")] pub struct ConsentRequestBody { pub client_id: String, pub permissions: Vec, pub reason: String, pub requesting_bank: String, pub requesting_bank_name: String, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "snake_case")] pub struct ConsentResponse { pub request_id: String, pub consent_id: String, pub status: String, pub message: String, pub created_at: String, pub auto_approved: bool, } // --- Account & Transaction Models --- #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here pub struct AccountData { pub account: Vec, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct Account { pub account_id: String, pub status: Option, pub currency: String, pub account_type: String, pub account_sub_type: Option, pub description: Option, pub nickname: String, pub opening_date: Option, pub account: Option>, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct AccountIdentification { pub scheme_name: String, pub identification: String, pub name: String, } #[derive(Debug, Deserialize, Serialize, Clone)] pub struct BalanceResponse { pub data: BalanceData, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here pub struct BalanceData { pub balance: Vec, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct Balance { pub account_id: String, #[serde(rename = "type")] pub balance_type: String, pub date_time: DateTime, pub amount: Amount, pub credit_debit_indicator: String, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct TransactionData { pub transaction: Vec, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here #[serde(rename_all = "camelCase")] pub struct Transaction { pub account_id: String, pub transaction_id: String, pub amount: Amount, pub credit_debit_indicator: String, pub status: String, pub booking_date_time: DateTime, pub value_date_time: Option>, pub transaction_information: String, pub bank_transaction_code: Option, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here pub struct Amount { pub amount: String, pub currency: String, } #[derive(Debug, Deserialize, Serialize, Clone)] // Added Serialize here pub struct BankTransactionCode { pub code: String, }