iyzipay_rust/model/
installment.rs

1use bigdecimal::BigDecimal;
2use log::debug;
3
4use crate::client::HttpClient;
5use crate::options::Options;
6use crate::requests::PKISerialize;
7use crate::requests::RetrieveInstallmentInfoRequest;
8use crate::resource::IyzipayResource;
9use crate::types::Result;
10
11#[derive(Debug, Default, Serialize, Deserialize, PartialEq)]
12#[serde(rename_all = "camelCase")]
13pub struct InstallmentInfo {
14    #[serde(flatten)]
15    resource: IyzipayResource,
16
17    installment_details: Option<Vec<InstallmentDetail>>,
18}
19
20impl InstallmentInfo {
21    pub fn retrieve(
22        req: &RetrieveInstallmentInfoRequest,
23        options: &Options,
24    ) -> Result<InstallmentInfo> {
25        let request = serde_json::to_string(req)?;
26        debug!("RequestBody:{}", request);
27        let res = HttpClient::create().post(
28            format!("{}{}", options.base_url(), "/payment/iyzipos/installment").as_str(),
29            request,
30            IyzipayResource::get_http_headers(req.serialize().unwrap_or_default(), &options),
31        )?;
32        let response = res.json()?;
33        Ok(response)
34    }
35
36    pub fn set_installment_details<T: Into<Vec<InstallmentDetail>>>(
37        &mut self,
38        installment_details: T,
39    ) {
40        self.installment_details = Some(installment_details.into());
41    }
42
43    pub fn installment_details(&self) -> Option<&Vec<InstallmentDetail>> {
44        self.installment_details.as_ref()
45    }
46}
47
48impl std::ops::Deref for InstallmentInfo {
49    type Target = IyzipayResource;
50    fn deref(&self) -> &Self::Target {
51        &self.resource
52    }
53}
54
55#[derive(Debug, Default, Serialize, Deserialize, PartialEq)]
56#[serde(rename_all = "camelCase")]
57pub struct InstallmentDetail {
58    bin_number: Option<String>,
59
60    price: Option<BigDecimal>,
61
62    card_type: Option<String>,
63
64    card_association: Option<String>,
65
66    card_family_name: Option<String>,
67
68    force3ds: Option<u8>,
69
70    bank_code: Option<i64>,
71
72    bank_name: Option<String>,
73
74    force_cvc: Option<u8>,
75
76    commercial: Option<u8>,
77
78    installment_prices: Option<Vec<InstallmentPrice>>,
79}
80
81impl InstallmentDetail {
82    pub fn set_price<T: Into<BigDecimal>>(&mut self, price: T) {
83        self.price = Some(price.into());
84    }
85
86    pub fn set_card_type<T: Into<String>>(&mut self, card_type: T) {
87        self.card_type = Some(card_type.into());
88    }
89
90    pub fn set_card_association<T: Into<String>>(&mut self, card_association: T) {
91        self.card_association = Some(card_association.into());
92    }
93
94    pub fn set_card_family_name<T: Into<String>>(&mut self, card_family_name: T) {
95        self.card_family_name = Some(card_family_name.into());
96    }
97
98    pub fn set_force3ds<T: Into<u8>>(&mut self, force3ds: T) {
99        self.force3ds = Some(force3ds.into());
100    }
101
102    pub fn set_bank_code<T: Into<i64>>(&mut self, bank_code: T) {
103        self.bank_code = Some(bank_code.into());
104    }
105
106    pub fn set_bank_name<T: Into<String>>(&mut self, bank_name: T) {
107        self.bank_name = Some(bank_name.into());
108    }
109
110    pub fn set_force_cvc<T: Into<u8>>(&mut self, force_cvc: T) {
111        self.force_cvc = Some(force_cvc.into());
112    }
113
114    pub fn set_commercial<T: Into<u8>>(&mut self, commercial: T) {
115        self.commercial = Some(commercial.into());
116    }
117
118    pub fn set_installment_prices<T: Into<Vec<InstallmentPrice>>>(
119        &mut self,
120        installment_prices: T,
121    ) {
122        self.installment_prices = Some(installment_prices.into());
123    }
124
125    pub fn bin_number(&self) -> Option<&String> {
126        self.bin_number.as_ref()
127    }
128
129    pub fn price(&self) -> Option<&BigDecimal> {
130        self.price.as_ref()
131    }
132    pub fn card_type(&self) -> Option<&String> {
133        self.card_type.as_ref()
134    }
135    pub fn card_association(&self) -> Option<&String> {
136        self.card_association.as_ref()
137    }
138    pub fn card_family_name(&self) -> Option<&String> {
139        self.card_family_name.as_ref()
140    }
141    pub fn force3ds(&self) -> Option<&u8> {
142        self.force3ds.as_ref()
143    }
144    pub fn bank_code(&self) -> Option<&i64> {
145        self.bank_code.as_ref()
146    }
147    pub fn bank_name(&self) -> Option<&String> {
148        self.bank_name.as_ref()
149    }
150    pub fn force_cvc(&self) -> Option<&u8> {
151        self.force_cvc.as_ref()
152    }
153    pub fn commercial(&self) -> Option<&u8> {
154        self.commercial.as_ref()
155    }
156    pub fn installment_prices(&self) -> Option<&Vec<InstallmentPrice>> {
157        self.installment_prices.as_ref()
158    }
159}
160
161#[derive(Debug, Default, Serialize, Deserialize, PartialEq)]
162#[serde(rename_all = "camelCase")]
163pub struct InstallmentPrice {
164    installment_price: Option<BigDecimal>,
165
166    total_price: Option<BigDecimal>,
167
168    installment_number: Option<u8>,
169}
170
171impl InstallmentPrice {
172    pub fn set_installment_price<T: Into<BigDecimal>>(&mut self, installment_price: T) {
173        self.installment_price = Some(installment_price.into());
174    }
175
176    pub fn set_total_price<T: Into<BigDecimal>>(&mut self, total_price: T) {
177        self.total_price = Some(total_price.into());
178    }
179
180    pub fn set_installment_number<T: Into<u8>>(&mut self, installment_number: T) {
181        self.installment_number = Some(installment_number.into());
182    }
183
184    pub fn installment_price(&self) -> Option<&BigDecimal> {
185        self.installment_price.as_ref()
186    }
187    pub fn total_price(&self) -> Option<&BigDecimal> {
188        self.total_price.as_ref()
189    }
190    pub fn installment_number(&self) -> Option<&u8> {
191        self.installment_number.as_ref()
192    }
193}