mercadopago_sdk_rust/card_tokens/
requests.rs

1use serde::{Deserialize, Serialize};
2
3use crate::common_types::{Cardholder, PersonalIdentification};
4
5/// Options used to create a Card Token.
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct CardTokenOptions<'a> {
8    pub(crate) card_number: &'a str,
9    pub(crate) expiration_month: &'a str,
10    pub(crate) expiration_year: &'a str,
11    pub(crate) security_code: &'a str,
12    pub(crate) cardholder: Cardholder,
13
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub(crate) public_key: Option<String>,
16}
17
18impl<'a> CardTokenOptions<'a> {
19    pub fn new(
20        card_number: &'a str,
21        card_expiration_month: &'a str,
22        card_expiration_year: &'a str,
23        security_code: &'a str,
24        cardholder_name: String,
25        cardholder_personal_id: PersonalIdentification,
26    ) -> CardTokenOptions<'a> {
27        Self {
28            card_number,
29            expiration_month: card_expiration_month,
30            expiration_year: card_expiration_year,
31            security_code,
32            cardholder: Cardholder {
33                name: cardholder_name,
34                identification: cardholder_personal_id,
35            },
36
37            public_key: None,
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn t_token_serialization() {
48        #[test]
49        fn t_token_response() {
50            let payload = serde_json::from_slice::<CardTokenOptions>(include_bytes!(
51                "../../tests/assets/card_tokens_create_request.json"
52            ))
53            .unwrap();
54            println!("{:?}", payload);
55        }
56    }
57}