flutterwave_v3_models/charge/bank_transfer/
mod.rs

1use crate::{
2    common::payload::Payload,
3    fwcall::{FwCall, ToFwCall},
4};
5use serde::{Deserialize, Serialize};
6use std::{borrow::Cow, collections::HashMap};
7use validator::Validate;
8
9#[derive(Debug, Deserialize, Serialize, Validate)]
10pub struct BankTransferReq {
11    pub amount: i32,
12    #[validate(email, length(max = 100))]
13    pub email: String,
14    #[validate(length(min = 3, max = 3))]
15    pub currency: String,
16    pub tx_ref: String,
17    pub fullname: Option<String>,
18    #[validate(phone, length(max = 50))]
19    pub phone_number: Option<String>,
20    pub client_ip: Option<String>,
21    pub device_fingerprint: Option<String>,
22    pub meta: HashMap<String, String>,
23    pub subaccounts: Vec<BankTransferSubAcct>,
24    pub narration: Option<String>,
25    pub is_permanent: bool,
26}
27
28impl<'a> ToFwCall<'a> for BankTransferReq {
29    type ApiRequest = Self;
30
31    type ApiResponse = BankTransferRes;
32
33    fn get_call(self) -> FwCall<'a, Self::ApiRequest, Self::ApiResponse> {
34        FwCall::new(
35            Cow::Borrowed("/v3/charges?type=bank_transfer"),
36            reqwest::Method::POST,
37            Some(Payload::ToEncrypt(self)),
38        )
39    }
40}
41
42#[derive(Debug, Deserialize, Serialize)]
43pub struct BankTransferSubAcct {
44    pub id: String,
45}
46
47#[derive(Debug, Deserialize, Serialize)]
48pub struct BankTransferRes {
49    pub status: String,
50    pub message: String,
51    pub meta: BankTransferMeta,
52    pub subaccounts: Vec<SubAccount>,
53}
54
55#[derive(Debug, Deserialize, Serialize)]
56pub struct SubAccount {
57    pub id: String,
58}
59
60#[derive(Debug, Deserialize, Serialize)]
61pub struct BankTransferMeta {
62    pub authorization: BankTransferAuth,
63}
64
65#[derive(Debug, Deserialize, Serialize)]
66pub struct BankTransferAuth {
67    pub transfer_reference: String,
68    pub transfer_account: String,
69    pub transfer_bank: String,
70    pub account_expiration: String,
71    pub transfer_note: String,
72    pub transfer_amount: i32,
73    pub mode: String,
74}