ezcapsolver/tasks/
recaptcha.rs1use serde::Serialize;
2
3use super::ExtraFields;
4
5const V3_DEFAULT_IS_INVISIBLE: bool = true;
10
11const DEFAULT_CLASSIFICATION_SIZE: i32 = 4;
13
14#[derive(Debug, Clone, Serialize, Default, bon::Builder)]
41#[builder(on(String, into))]
42#[serde(remote = "Self", rename_all = "camelCase")]
43pub struct RecaptchaV2Task {
44 #[serde(rename = "websiteURL")]
46 pub website_url: String,
47 pub website_key: String,
49 #[serde(rename = "isInvisible")]
51 #[builder(default)]
52 pub is_invisible: bool,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub sa: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub s: Option<String>,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub website_title: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub proxy: Option<String>,
65 #[serde(skip)]
67 #[builder(default)]
68 pub extra: ExtraFields,
69}
70
71#[derive(Debug, Clone, Serialize, bon::Builder)]
73#[builder(on(String, into))]
74#[serde(remote = "Self", rename_all = "camelCase")]
75pub struct RecaptchaV3Task {
76 #[serde(rename = "websiteURL")]
78 pub website_url: String,
79 pub website_key: String,
81 #[serde(rename = "isInvisible")]
83 #[builder(default = V3_DEFAULT_IS_INVISIBLE)]
84 pub is_invisible: bool,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub page_action: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub website_title: Option<String>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub check_field: Option<String>,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub proxy: Option<String>,
97 #[serde(skip)]
99 #[builder(default)]
100 pub extra: ExtraFields,
101}
102
103impl Default for RecaptchaV3Task {
104 fn default() -> Self {
105 Self {
106 website_url: String::new(),
107 website_key: String::new(),
108 is_invisible: V3_DEFAULT_IS_INVISIBLE,
109 page_action: None,
110 website_title: None,
111 check_field: None,
112 proxy: None,
113 extra: ExtraFields::new(),
114 }
115 }
116}
117
118#[derive(Debug, Clone, Serialize, bon::Builder)]
120#[builder(on(String, into))]
121#[serde(remote = "Self", rename_all = "camelCase")]
122pub struct RecaptchaV2ClassificationTask {
123 pub image: String,
125 pub question: String,
127 #[builder(default = DEFAULT_CLASSIFICATION_SIZE)]
129 pub size: i32,
130 #[serde(skip)]
132 #[builder(default)]
133 pub extra: ExtraFields,
134}
135
136impl Default for RecaptchaV2ClassificationTask {
137 fn default() -> Self {
138 Self {
139 image: String::new(),
140 question: String::new(),
141 size: DEFAULT_CLASSIFICATION_SIZE,
142 extra: ExtraFields::new(),
143 }
144 }
145}