Skip to main content

ezcapsolver/tasks/
mod.rs

1use std::collections::BTreeMap;
2
3use serde_json::Value;
4
5/// Gives a task model a `Serialize` that merges `extra` without letting it
6/// shadow a declared field.
7///
8/// Every model carries `#[serde(remote = "Self")]`, which keeps the derived
9/// implementation reachable as an inherent function. Calling it from here is
10/// therefore not recursive — the same shape as the local `type wire T` alias
11/// the Go SDK uses for this.
12macro_rules! impl_task_serialize {
13    ($($ty:ident),+ $(,)?) => {$(
14        impl serde::Serialize for $ty {
15            fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
16            where
17                S: serde::Serializer,
18            {
19                $crate::wire::merge_extra(|s| <$ty>::serialize(self, s), &self.extra, serializer)
20            }
21        }
22    )+};
23}
24
25mod akamai;
26mod cloudflare;
27mod datadome;
28mod funcaptcha;
29mod hcaptcha;
30mod incapsula;
31mod perimeterx;
32mod recaptcha;
33mod tls;
34
35pub use akamai::{AkamaiSbsdTask, AkamaiSbsdTaskBuilder, AkamaiWebTask, AkamaiWebTaskBuilder};
36pub use cloudflare::{
37    Cloudflare5sTask, Cloudflare5sTaskBuilder, CloudflareTurnstileTask,
38    CloudflareTurnstileTaskBuilder,
39};
40pub use datadome::{
41    DataDomeJsType, DataDomeStep, DataDomeTagsTask, DataDomeTagsTaskBuilder, DataDomeTask,
42    DataDomeTaskBuilder,
43};
44pub use funcaptcha::{
45    FunCaptchaClassificationTask, FunCaptchaClassificationTaskBuilder, FunCaptchaTask,
46    FunCaptchaTaskBuilder,
47};
48pub use hcaptcha::{
49    HcaptchaClassificationTask, HcaptchaClassificationTaskBuilder, HcaptchaTask,
50    HcaptchaTaskBuilder,
51};
52pub use incapsula::{IncapsulaTask, IncapsulaTaskBuilder};
53pub use perimeterx::{PerimeterXTask, PerimeterXTaskBuilder};
54pub use recaptcha::{
55    RecaptchaV2ClassificationTask, RecaptchaV2ClassificationTaskBuilder, RecaptchaV2Task,
56    RecaptchaV2TaskBuilder, RecaptchaV3Task, RecaptchaV3TaskBuilder,
57};
58pub use tls::{TlsForwardTask, TlsForwardTaskBuilder, TlsHttpMethod};
59
60impl_task_serialize!(
61    AkamaiSbsdTask,
62    AkamaiWebTask,
63    Cloudflare5sTask,
64    CloudflareTurnstileTask,
65    DataDomeTagsTask,
66    DataDomeTask,
67    FunCaptchaClassificationTask,
68    FunCaptchaTask,
69    HcaptchaClassificationTask,
70    HcaptchaTask,
71    IncapsulaTask,
72    PerimeterXTask,
73    RecaptchaV2ClassificationTask,
74    RecaptchaV2Task,
75    RecaptchaV3Task,
76    TlsForwardTask,
77);
78
79/// Additional task properties forwarded to the worker without SDK validation.
80///
81/// Keys here are sent as-is next to the declared fields. A key that a declared
82/// field already produced is dropped rather than applied, so a pass-through
83/// value can add a parameter but never rewrite one the model states. A field
84/// left unset produces no key, and stays available for `extra` to fill.
85pub type ExtraFields = BTreeMap<String, Value>;