1pub mod user;
2pub mod wallet;
3pub mod card;
4
5use reqwest::{Client, RequestBuilder, Response};
6use serde_json::Value;
7
8#[macro_use]
9extern crate serde_derive;
10
11pub struct Mangopay {
12 client_id: String,
13 api_key: String,
14 authorization_token: String,
15 mango_api_url_with_user_id: String
16}
17
18pub type GetCardsResponse = Vec<CardResponse>;
19
20#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct CardResponse {
23 #[serde(rename = "ExpirationDate")]
24 pub expiration_date: String,
25 #[serde(rename = "Alias")]
26 pub alias: String,
27 #[serde(rename = "CardType")]
28 pub card_type: String,
29 #[serde(rename = "CardProvider")]
30 pub card_provider: String,
31 #[serde(rename = "Country")]
32 pub country: String,
33 #[serde(rename = "Product")]
34 pub product: String,
35 #[serde(rename = "BankCode")]
36 pub bank_code: String,
37 #[serde(rename = "Active")]
38 pub active: bool,
39 #[serde(rename = "Currency")]
40 pub currency: String,
41 #[serde(rename = "Validity")]
42 pub validity: String,
43 #[serde(rename = "UserId")]
44 pub user_id: String,
45 #[serde(rename = "Id")]
46 pub id: String,
47 #[serde(rename = "Tag")]
48 pub tag: Value,
49 #[serde(rename = "CreationDate")]
50 pub creation_date: i64,
51 #[serde(rename = "Fingerprint")]
52 pub fingerprint: String,
53}
54
55impl Mangopay {
56
57 pub fn init(client_id: String, api_key: String, mango_url: String) -> Self {
58 let formatted_token = format!("{}:{}", client_id, api_key);
59 let authorization_token = base64::encode(formatted_token);
60 let mango_api_url_with_user_id: String = format!("{}{}", mango_url, client_id);
61 let mango_infos: Mangopay = Mangopay {client_id, api_key, authorization_token, mango_api_url_with_user_id};
62 mango_infos
63 }
64
65 async fn make_get_api_call(self: &Mangopay, api_url: String) -> reqwest::Result<Response> {
66 let client: Client = reqwest::Client::new();
67 client.get(format!("{}/{}", self.mango_api_url_with_user_id, api_url))
68 .header("Authorization", format!("Basic {}", self.authorization_token))
69 .send().await
70 }
71
72 fn create_put_api_call(self: &Mangopay, api_url: String) -> RequestBuilder {
73 let client: Client = reqwest::Client::new();
74 client.put(format!("{}/{}", self.mango_api_url_with_user_id, api_url))
75 .header("Authorization", format!("Basic {}", self.authorization_token))
76 }
77
78 fn create_post_api_call(self: &Mangopay, api_url: String) -> RequestBuilder {
79 let client: Client = reqwest::Client::new();
80 client.post(format!("{}/{}", self.mango_api_url_with_user_id, api_url))
81 .header("Authorization", format!("Basic {}", self.authorization_token))
82 }
83}
84
85#[cfg(test)]
86mod tests {
87 use crate::Mangopay;
88
89 #[test]
90 fn init() {
91 let client_id: String = "client_id".to_string();
92 let api_key: String = "api_key".to_string();
93 let mangop: Mangopay = Mangopay::init(client_id.to_owned(), api_key.to_owned(), "https://api.sandbox.mangopay.com/v2.01/".to_string());
94 assert_eq!(mangop.api_key, "api_key");
95 assert_eq!(mangop.client_id, "client_id");
96 let formatted_token = format!("{}:{}", &client_id, &api_key);
97 let authorization_token = base64::encode(formatted_token);
98 assert_eq!(mangop.authorization_token, authorization_token);
99 }
100}