Skip to main content

rust_nicepay/services/v2/
request_direct.rs

1use crate::models::v2::cancel_direct_model::CancelDirectV2Model;
2use crate::models::v2::inquiry_direct_model::InquiryDirectV2Model;
3use crate::models::v2::payment_direct_model::PaymentDirectV2Model;
4use crate::models::v2::regist_direct_model::RegistDirectV2Model;
5use crate::utils::config::Config;
6use reqwest::{Client, Error, Response};
7use std::future::Future;
8use std::pin::Pin;
9
10pub type MyFuture<T> = Pin<Box<dyn Future<Output = Result<T, Error>> + Send>>;
11
12pub struct DirectV2Requester<'a> {
13    pub config: &'a Config,
14}
15
16impl<'a> DirectV2Requester<'a> {
17    pub fn new(config: &'a Config) -> Self {
18        Self { config }
19    }
20
21    pub fn request_regist(&self, req_direct: RegistDirectV2Model) -> MyFuture<Response> {
22        let base_url = self.config.get_snap_api_base_url();
23        let url = format!("{}/direct/v2/registration", base_url);
24
25        let client = Client::new();
26        let fut = async move {
27            let response = client.post(url).json(&req_direct).send().await?;
28            Ok(response)
29        };
30
31        Box::pin(fut)
32    }
33
34    pub fn request_inquiry(&self, req_direct: InquiryDirectV2Model) -> MyFuture<Response> {
35        let base_url = self.config.get_snap_api_base_url();
36        let url = format!("{}/direct/v2/inquiry", base_url);
37
38        let client = Client::new();
39
40        let fut = async move {
41            let response = client.post(url).json(&req_direct).send().await?;
42            Ok(response)
43        };
44
45        Box::pin(fut)
46    }
47
48    pub fn request_payment(&self, req_direct: PaymentDirectV2Model) -> MyFuture<Response> {
49        let base_url = self.config.get_snap_api_base_url();
50        let url = format!("{}/direct/v2/payment", base_url);
51
52        let client = Client::new();
53
54        let fut = async move {
55            let response = client.post(url).json(&req_direct).send().await?;
56            Ok(response)
57        };
58
59        Box::pin(fut)
60    }
61
62    pub fn request_cancel(&self, req_direct: CancelDirectV2Model) -> MyFuture<Response> {
63        let base_url = self.config.get_snap_api_base_url();
64        let url = format!("{}/direct/v2/cancel", base_url);
65
66        let client = Client::new();
67
68        let fut = async move {
69            let response = client.post(url).json(&req_direct).send().await?;
70            Ok(response)
71        };
72
73        Box::pin(fut)
74    }
75}