mangopay/
lib.rs

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}