rust_anticaptcha/core/
request_interface.rs

1use reqwest::Response;
2use serde_json::Value;
3
4use super::constants::BASE_REQUEST_URL;
5use super::enums::EnpPostfix;
6use super::structs::{CreateTaskRequest, ResultTaskRequest};
7
8/// Structure-interface to send different network requests
9pub struct RequestInterface {
10    request_client: reqwest::Client,
11}
12impl Default for RequestInterface {
13    fn default() -> Self {
14        RequestInterface::new()
15    }
16}
17
18impl RequestInterface {
19    /// New `RequestInterface` instance creation
20    pub fn new() -> Self {
21        RequestInterface {
22            request_client: reqwest::Client::new(),
23        }
24    }
25
26    /// Function send GET request to URL and return response or string error
27    pub async fn send_get_request(&self, url: &String) -> Result<Response, String> {
28        let response = self.request_client.get(url).send().await.unwrap();
29
30        if response.status().eq(&200) {
31            Ok(response)
32        } else {
33            Err(format!(
34                "Invalid request to {}, status code - {} response - {}",
35                url,
36                response.status(),
37                response.text().await.unwrap()
38            ))
39        }
40    }
41
42    /// Function send POST request to URL and return response or string error
43    pub async fn send_post_request(
44        &self,
45        payload: &Value,
46        url: &String,
47    ) -> Result<Response, String> {
48        let response = self.request_client.post(url).json(payload).send().await.unwrap();
49
50        if response.status().eq(&200) {
51            Ok(response)
52        } else {
53            Err(format!(
54                "Invalid request  to {}, status code - {} response - {}",
55                url,
56                response.status(),
57                response.text().await.unwrap()
58            ))
59        }
60    }
61
62    /// Function send `createTask` request to URL and return JSON response or string error
63    pub async fn send_create_task_request(
64        &self,
65        payload: &CreateTaskRequest,
66        enp_postfix: &EnpPostfix,
67    ) -> Result<Value, String> {
68        let req_url = BASE_REQUEST_URL.to_string() + &enp_postfix.to_string();
69
70        let response = self
71            .request_client
72            .post(&req_url)
73            .json(payload)
74            .send()
75            .await
76            .unwrap();
77
78        if response.status().eq(&200) {
79            Ok(response.json().await.unwrap())
80        } else {
81            Err(format!(
82                "Invalid request to {}, status code - {} response - {}",
83                req_url,
84                response.status(),
85                response.text().await.unwrap()
86            ))
87        }
88    }
89
90    /// Function send `getTaskResult ` request to URL and return JSON response or string error
91    pub async fn send_get_result_request(
92        &self,
93        payload: &ResultTaskRequest,
94        enp_postfix: &EnpPostfix,
95    ) -> Result<Value, String> {
96        let req_url = BASE_REQUEST_URL.to_string() + &enp_postfix.to_string();
97
98        let response = self
99            .request_client
100            .post(&req_url)
101            .json(payload)
102            .send()
103            .await
104            .unwrap();
105
106        if response.status().eq(&200) {
107            Ok(response.json().await.unwrap())
108        } else {
109            Err(format!(
110                "Invalid request to {}, status code - {} response - {}",
111                req_url,
112                response.status(),
113                response.text().await.unwrap()
114            ))
115        }
116    }
117}