flutterwave_v3_models/charge/bank_transfer/
mod.rs1use 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}