use serde_json::{json, Value};
use super::core::constants::BASE_REQUEST_URL;
use super::core::enums::EnpPostfix;
use super::core::request_interface::RequestInterface;
pub struct Control {
request_interface: RequestInterface,
}
impl Default for Control {
fn default() -> Self {
Control::new()
}
}
impl Control {
pub fn new() -> Self {
Control {
request_interface: RequestInterface::new(),
}
}
async fn send_control_request(&self, payload: &Value, enp_postfix: &EnpPostfix) -> Value {
let req_url = BASE_REQUEST_URL.to_string() + &enp_postfix.to_string();
let result = self
.request_interface
.send_post_request(payload, &req_url)
.await
.unwrap();
if result.status().eq(&200) {
result.json().await.unwrap()
} else {
panic!(
"{}",
format!(
"Invalid request to API, status code - {} response - {}",
result.status(),
result.text().await.unwrap()
)
)
}
}
pub async fn get_balance(&self, api_key: &String) -> Value {
let map = json!({"clientKey": api_key});
self.send_control_request(&map, &EnpPostfix::getBalance).await
}
pub async fn get_queue_stats(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::getQueueStats)
.await
}
pub async fn report_incorrect_image(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::reportIncorrectImageCaptcha)
.await
}
pub async fn report_incorrect_recaptcha(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::reportIncorrectRecaptcha)
.await
}
pub async fn report_correct_recaptcha(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::reportCorrectRecaptcha)
.await
}
pub async fn report_incorrect_hcaptcha(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::reportIncorrectHcaptcha)
.await
}
pub async fn push_antigate_var(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::pushAntiGateVariable)
.await
}
pub async fn get_spending_stats(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::getSpendingStats)
.await
}
pub async fn get_app_stats(&self, enp_payload: &Value) -> Value {
self.send_control_request(enp_payload, &EnpPostfix::getAppStats)
.await
}
}