use super::AsyncEzCapSolverClient;
use crate::{
AkamaiSbsdTask, AkamaiWebTask, Cloudflare5sTask, CloudflareTurnstileTask, DataDomeTagsTask,
DataDomeTask, FunCaptchaClassificationTask, FunCaptchaTask, HcaptchaClassificationTask,
HcaptchaTask, IncapsulaTask, PerimeterXTask, RecaptchaV2ClassificationTask, RecaptchaV2Task,
RecaptchaV3Task, Result, Solved, TaskType, TlsForwardTask,
task_solvers::{decode_sync_result, for_each_task_solver},
};
macro_rules! define_solver {
($mode:ident, $name:ident, $task:ty, $task_type:ident, $solution:ty) => {
pub async fn $name(&self, task: &$task) -> Result<Solved<$solution>> {
let solved = self.solve(TaskType::$task_type, task).await?;
let solution = solved.solution.deserialize()?;
Ok(Solved {
task_id: solved.task_id,
request_id: solved.request_id,
solution,
raw: solved.raw,
})
}
pastey::paste! {
pub async fn [<sync_ $name>](&self, task: &$task) -> Result<Solved<$solution>> {
let result = self.create_sync_task(TaskType::$task_type, task).await?;
decode_sync_result(result)
}
}
};
}
impl AsyncEzCapSolverClient {
for_each_task_solver!(define_solver);
}