1use crate::entity::{
5 DataForSeoLabsAppCompetitorItem, DataForSeoLabsAppIntersectionItem,
6 DataForSeoLabsAppKeywordItem, DataForSeoLabsBulkAppMetricsItem,
7 DataForSeoLabsCategoriesForKeywordsItem, DataForSeoLabsCategoryMetricsItem,
8 DataForSeoLabsCompetitorItem, DataForSeoLabsDomainIntersectionItem,
9 DataForSeoLabsDomainMetricsByCategoriesItem, DataForSeoLabsDomainMetricsItem,
10 DataForSeoLabsHistoricalKeywordDataItem, DataForSeoLabsHistoricalRankOverviewItem,
11 DataForSeoLabsHistoricalSerpItem, DataForSeoLabsHistoricalTrafficEstimationItem,
12 DataForSeoLabsKeywordData, DataForSeoLabsKeywordDifficultyItem,
13 DataForSeoLabsPageIntersectionItem, DataForSeoLabsRankedKeywordItem,
14 DataForSeoLabsRelatedKeywordItem, DataForSeoLabsRelevantPageItem, DataForSeoLabsResult,
15 DataForSeoLabsSearchIntentItem, DataForSeoLabsSerpCompetitorItem, DataForSeoLabsSubdomainItem,
16 DataForSeoLabsTrafficEstimationItem,
17};
18use crate::{DataForSeoApiResponse, DataForSeoClient};
19use serde::{Deserialize, Serialize};
20use serde_json::Value;
21use std::collections::HashMap;
22
23pub struct DataForSeoLabsApiGoogle<'a> {
25 pub(crate) client: &'a DataForSeoClient,
26}
27
28impl DataForSeoLabsApiGoogle<'_> {
29 pub async fn ranked_keywords(
32 &self,
33 data: Vec<DataForSeoLabsRankedKeywordsRequest>,
34 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsRankedKeywordItem>> {
35 self.client
36 .http_post("/v3/dataforseo_labs/google/ranked_keywords/live", &data)
37 .await
38 }
39
40 pub async fn keyword_ideas(
43 &self,
44 data: Vec<DataForSeoLabsKeywordIdeasRequest>,
45 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
46 self.client
47 .http_post("/v3/dataforseo_labs/google/keyword_ideas/live", &data)
48 .await
49 }
50
51 pub async fn keyword_suggestions(
54 &self,
55 data: Vec<DataForSeoLabsKeywordSuggestionsRequest>,
56 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
57 self.client
58 .http_post("/v3/dataforseo_labs/google/keyword_suggestions/live", &data)
59 .await
60 }
61
62 pub async fn related_keywords(
65 &self,
66 data: Vec<DataForSeoLabsRelatedKeywordsRequest>,
67 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsRelatedKeywordItem>> {
68 self.client
69 .http_post("/v3/dataforseo_labs/google/related_keywords/live", &data)
70 .await
71 }
72
73 pub async fn keywords_for_site(
76 &self,
77 data: Vec<DataForSeoLabsKeywordsForSiteRequest>,
78 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
79 self.client
80 .http_post("/v3/dataforseo_labs/google/keywords_for_site/live", &data)
81 .await
82 }
83
84 pub async fn bulk_keyword_difficulty(
87 &self,
88 data: Vec<DataForSeoLabsBulkKeywordDifficultyRequest>,
89 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordDifficultyItem>> {
90 self.client
91 .http_post(
92 "/v3/dataforseo_labs/google/bulk_keyword_difficulty/live",
93 &data,
94 )
95 .await
96 }
97
98 pub async fn search_intent(
101 &self,
102 data: Vec<DataForSeoLabsSearchIntentRequest>,
103 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsSearchIntentItem>> {
104 self.client
105 .http_post("/v3/dataforseo_labs/google/search_intent/live", &data)
106 .await
107 }
108
109 pub async fn keyword_overview(
112 &self,
113 data: Vec<DataForSeoLabsKeywordOverviewRequest>,
114 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
115 self.client
116 .http_post("/v3/dataforseo_labs/google/keyword_overview/live", &data)
117 .await
118 }
119
120 pub async fn historical_keyword_data(
123 &self,
124 data: Vec<DataForSeoLabsHistoricalKeywordDataRequest>,
125 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsHistoricalKeywordDataItem>> {
126 self.client
127 .http_post(
128 "/v3/dataforseo_labs/google/historical_keyword_data/live",
129 &data,
130 )
131 .await
132 }
133
134 pub async fn historical_serps(
137 &self,
138 data: Vec<DataForSeoLabsHistoricalSerpsRequest>,
139 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsHistoricalSerpItem>> {
140 self.client
141 .http_post("/v3/dataforseo_labs/google/historical_serps/live", &data)
142 .await
143 }
144
145 pub async fn top_searches(
148 &self,
149 data: Vec<DataForSeoLabsTopSearchesRequest>,
150 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
151 self.client
152 .http_post("/v3/dataforseo_labs/google/top_searches/live", &data)
153 .await
154 }
155
156 pub async fn serp_competitors(
159 &self,
160 data: Vec<DataForSeoLabsSerpCompetitorsRequest>,
161 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsSerpCompetitorItem>> {
162 self.client
163 .http_post("/v3/dataforseo_labs/google/serp_competitors/live", &data)
164 .await
165 }
166
167 pub async fn competitors_domain(
170 &self,
171 data: Vec<DataForSeoLabsCompetitorsDomainRequest>,
172 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsCompetitorItem>> {
173 self.client
174 .http_post("/v3/dataforseo_labs/google/competitors_domain/live", &data)
175 .await
176 }
177
178 pub async fn domain_intersection(
181 &self,
182 data: Vec<DataForSeoLabsDomainIntersectionRequest>,
183 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsDomainIntersectionItem>> {
184 self.client
185 .http_post("/v3/dataforseo_labs/google/domain_intersection/live", &data)
186 .await
187 }
188
189 pub async fn subdomains(
192 &self,
193 data: Vec<DataForSeoLabsSubdomainsRequest>,
194 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsSubdomainItem>> {
195 self.client
196 .http_post("/v3/dataforseo_labs/google/subdomains/live", &data)
197 .await
198 }
199
200 pub async fn relevant_pages(
203 &self,
204 data: Vec<DataForSeoLabsRelevantPagesRequest>,
205 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsRelevantPageItem>> {
206 self.client
207 .http_post("/v3/dataforseo_labs/google/relevant_pages/live", &data)
208 .await
209 }
210
211 pub async fn domain_rank_overview(
214 &self,
215 data: Vec<DataForSeoLabsDomainRankOverviewRequest>,
216 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsDomainMetricsItem>> {
217 self.client
218 .http_post(
219 "/v3/dataforseo_labs/google/domain_rank_overview/live",
220 &data,
221 )
222 .await
223 }
224
225 pub async fn page_intersection(
228 &self,
229 data: Vec<DataForSeoLabsPageIntersectionRequest>,
230 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsPageIntersectionItem>> {
231 self.client
232 .http_post("/v3/dataforseo_labs/google/page_intersection/live", &data)
233 .await
234 }
235
236 pub async fn bulk_traffic_estimation(
239 &self,
240 data: Vec<DataForSeoLabsBulkTrafficEstimationRequest>,
241 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsTrafficEstimationItem>> {
242 self.client
243 .http_post(
244 "/v3/dataforseo_labs/google/bulk_traffic_estimation/live",
245 &data,
246 )
247 .await
248 }
249
250 pub async fn historical_bulk_traffic_estimation(
253 &self,
254 data: Vec<DataForSeoLabsHistoricalBulkTrafficEstimationRequest>,
255 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsHistoricalTrafficEstimationItem>>
256 {
257 self.client
258 .http_post(
259 "/v3/dataforseo_labs/google/historical_bulk_traffic_estimation/live",
260 &data,
261 )
262 .await
263 }
264
265 pub async fn historical_rank_overview(
268 &self,
269 data: Vec<DataForSeoLabsHistoricalRankOverviewRequest>,
270 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsHistoricalRankOverviewItem>> {
271 self.client
272 .http_post(
273 "/v3/dataforseo_labs/google/historical_rank_overview/live",
274 &data,
275 )
276 .await
277 }
278
279 pub async fn categories_for_domain(
282 &self,
283 data: Vec<DataForSeoLabsCategoriesForDomainRequest>,
284 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsCategoryMetricsItem>> {
285 self.client
286 .http_post(
287 "/v3/dataforseo_labs/google/categories_for_domain/live",
288 &data,
289 )
290 .await
291 }
292
293 pub async fn categories_for_keywords(
296 &self,
297 data: Vec<DataForSeoLabsCategoriesForKeywordsRequest>,
298 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsCategoriesForKeywordsItem>> {
299 self.client
300 .http_post(
301 "/v3/dataforseo_labs/google/categories_for_keywords/live",
302 &data,
303 )
304 .await
305 }
306
307 pub async fn keywords_for_categories(
310 &self,
311 data: Vec<DataForSeoLabsKeywordsForCategoriesRequest>,
312 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsKeywordData>> {
313 self.client
314 .http_post(
315 "/v3/dataforseo_labs/google/keywords_for_categories/live",
316 &data,
317 )
318 .await
319 }
320
321 pub async fn domain_metrics_by_categories(
324 &self,
325 data: Vec<DataForSeoLabsDomainMetricsByCategoriesRequest>,
326 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsDomainMetricsByCategoriesItem>>
327 {
328 self.client
329 .http_post(
330 "/v3/dataforseo_labs/google/domain_metrics_by_categories/live",
331 &data,
332 )
333 .await
334 }
335
336 pub async fn keywords_for_app(
339 &self,
340 data: Vec<DataForSeoLabsKeywordsForAppRequest>,
341 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppKeywordItem>> {
342 self.client
343 .http_post("/v3/dataforseo_labs/google/keywords_for_app/live", &data)
344 .await
345 }
346
347 pub async fn app_competitors(
350 &self,
351 data: Vec<DataForSeoLabsAppCompetitorsRequest>,
352 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppCompetitorItem>> {
353 self.client
354 .http_post("/v3/dataforseo_labs/google/app_competitors/live", &data)
355 .await
356 }
357
358 pub async fn app_intersection(
361 &self,
362 data: Vec<DataForSeoLabsAppIntersectionRequest>,
363 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppIntersectionItem>> {
364 self.client
365 .http_post("/v3/dataforseo_labs/google/app_intersection/live", &data)
366 .await
367 }
368
369 pub async fn bulk_app_metrics(
372 &self,
373 data: Vec<DataForSeoLabsBulkAppMetricsRequest>,
374 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsBulkAppMetricsItem>> {
375 self.client
376 .http_post("/v3/dataforseo_labs/google/bulk_app_metrics/live", &data)
377 .await
378 }
379}
380
381#[derive(Debug, Default, Serialize, Deserialize, Clone)]
384pub struct DataForSeoLabsRankedKeywordsRequest {
385 pub target: String,
387 #[serde(skip_serializing_if = "Option::is_none")]
389 pub location_name: Option<String>,
390 #[serde(skip_serializing_if = "Option::is_none")]
392 pub location_code: Option<i32>,
393 #[serde(skip_serializing_if = "Option::is_none")]
395 pub language_name: Option<String>,
396 #[serde(skip_serializing_if = "Option::is_none")]
398 pub language_code: Option<String>,
399 #[serde(skip_serializing_if = "Option::is_none")]
401 pub ignore_synonyms: Option<bool>,
402 #[serde(skip_serializing_if = "Option::is_none")]
404 pub item_types: Option<Vec<String>>,
405 #[serde(skip_serializing_if = "Option::is_none")]
407 pub include_clickstream_data: Option<bool>,
408 #[serde(skip_serializing_if = "Option::is_none")]
410 pub load_rank_absolute: Option<bool>,
411 #[serde(skip_serializing_if = "Option::is_none")]
413 pub historical_serp_mode: Option<String>,
414 #[serde(skip_serializing_if = "Option::is_none")]
416 pub filters: Option<Vec<Value>>,
417 #[serde(skip_serializing_if = "Option::is_none")]
419 pub order_by: Option<Vec<String>>,
420 #[serde(skip_serializing_if = "Option::is_none")]
422 pub limit: Option<i32>,
423 #[serde(skip_serializing_if = "Option::is_none")]
425 pub offset: Option<i32>,
426 #[serde(skip_serializing_if = "Option::is_none")]
428 pub tag: Option<String>,
429}
430
431impl DataForSeoLabsRankedKeywordsRequest {
432 pub fn new(target: &str) -> DataForSeoLabsRankedKeywordsRequest {
434 DataForSeoLabsRankedKeywordsRequest {
435 target: target.to_string(),
436 ..Default::default()
437 }
438 }
439}
440
441#[derive(Debug, Default, Serialize, Deserialize, Clone)]
444pub struct DataForSeoLabsKeywordIdeasRequest {
445 pub keywords: Vec<String>,
447 #[serde(skip_serializing_if = "Option::is_none")]
449 pub location_name: Option<String>,
450 #[serde(skip_serializing_if = "Option::is_none")]
452 pub location_code: Option<i32>,
453 #[serde(skip_serializing_if = "Option::is_none")]
455 pub language_name: Option<String>,
456 #[serde(skip_serializing_if = "Option::is_none")]
458 pub language_code: Option<String>,
459 #[serde(skip_serializing_if = "Option::is_none")]
461 pub closely_variants: Option<bool>,
462 #[serde(skip_serializing_if = "Option::is_none")]
464 pub ignore_synonyms: Option<bool>,
465 #[serde(skip_serializing_if = "Option::is_none")]
467 pub include_serp_info: Option<bool>,
468 #[serde(skip_serializing_if = "Option::is_none")]
470 pub include_clickstream_data: Option<bool>,
471 #[serde(skip_serializing_if = "Option::is_none")]
473 pub filters: Option<Vec<Value>>,
474 #[serde(skip_serializing_if = "Option::is_none")]
476 pub order_by: Option<Vec<String>>,
477 #[serde(skip_serializing_if = "Option::is_none")]
479 pub limit: Option<i32>,
480 #[serde(skip_serializing_if = "Option::is_none")]
482 pub offset: Option<i32>,
483 #[serde(skip_serializing_if = "Option::is_none")]
485 pub offset_token: Option<String>,
486 #[serde(skip_serializing_if = "Option::is_none")]
488 pub tag: Option<String>,
489}
490
491impl DataForSeoLabsKeywordIdeasRequest {
492 pub fn new(keywords: Vec<String>) -> DataForSeoLabsKeywordIdeasRequest {
494 DataForSeoLabsKeywordIdeasRequest {
495 keywords,
496 ..Default::default()
497 }
498 }
499}
500
501#[derive(Debug, Default, Serialize, Deserialize, Clone)]
504pub struct DataForSeoLabsKeywordSuggestionsRequest {
505 pub keyword: String,
507 #[serde(skip_serializing_if = "Option::is_none")]
509 pub location_name: Option<String>,
510 #[serde(skip_serializing_if = "Option::is_none")]
512 pub location_code: Option<i32>,
513 #[serde(skip_serializing_if = "Option::is_none")]
515 pub language_name: Option<String>,
516 #[serde(skip_serializing_if = "Option::is_none")]
518 pub language_code: Option<String>,
519 #[serde(skip_serializing_if = "Option::is_none")]
521 pub include_seed_keyword: Option<bool>,
522 #[serde(skip_serializing_if = "Option::is_none")]
524 pub include_serp_info: Option<bool>,
525 #[serde(skip_serializing_if = "Option::is_none")]
527 pub include_clickstream_data: Option<bool>,
528 #[serde(skip_serializing_if = "Option::is_none")]
530 pub exact_match: Option<bool>,
531 #[serde(skip_serializing_if = "Option::is_none")]
533 pub ignore_synonyms: Option<bool>,
534 #[serde(skip_serializing_if = "Option::is_none")]
536 pub filters: Option<Vec<Value>>,
537 #[serde(skip_serializing_if = "Option::is_none")]
539 pub order_by: Option<Vec<String>>,
540 #[serde(skip_serializing_if = "Option::is_none")]
542 pub limit: Option<i32>,
543 #[serde(skip_serializing_if = "Option::is_none")]
545 pub offset: Option<i32>,
546 #[serde(skip_serializing_if = "Option::is_none")]
548 pub offset_token: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
551 pub tag: Option<String>,
552}
553
554impl DataForSeoLabsKeywordSuggestionsRequest {
555 pub fn new(keyword: &str) -> DataForSeoLabsKeywordSuggestionsRequest {
557 DataForSeoLabsKeywordSuggestionsRequest {
558 keyword: keyword.to_string(),
559 ..Default::default()
560 }
561 }
562}
563
564#[derive(Debug, Default, Serialize, Deserialize, Clone)]
567pub struct DataForSeoLabsRelatedKeywordsRequest {
568 pub keyword: String,
570 #[serde(skip_serializing_if = "Option::is_none")]
572 pub location_name: Option<String>,
573 #[serde(skip_serializing_if = "Option::is_none")]
575 pub location_code: Option<i32>,
576 #[serde(skip_serializing_if = "Option::is_none")]
578 pub language_name: Option<String>,
579 #[serde(skip_serializing_if = "Option::is_none")]
581 pub language_code: Option<String>,
582 #[serde(skip_serializing_if = "Option::is_none")]
584 pub depth: Option<i64>,
585 #[serde(skip_serializing_if = "Option::is_none")]
587 pub include_seed_keyword: Option<bool>,
588 #[serde(skip_serializing_if = "Option::is_none")]
590 pub include_serp_info: Option<bool>,
591 #[serde(skip_serializing_if = "Option::is_none")]
593 pub include_clickstream_data: Option<bool>,
594 #[serde(skip_serializing_if = "Option::is_none")]
596 pub ignore_synonyms: Option<bool>,
597 #[serde(skip_serializing_if = "Option::is_none")]
599 pub replace_with_core_keyword: Option<bool>,
600 #[serde(skip_serializing_if = "Option::is_none")]
602 pub filters: Option<Vec<Value>>,
603 #[serde(skip_serializing_if = "Option::is_none")]
605 pub order_by: Option<Vec<String>>,
606 #[serde(skip_serializing_if = "Option::is_none")]
608 pub limit: Option<i32>,
609 #[serde(skip_serializing_if = "Option::is_none")]
611 pub offset: Option<i32>,
612 #[serde(skip_serializing_if = "Option::is_none")]
614 pub tag: Option<String>,
615}
616
617impl DataForSeoLabsRelatedKeywordsRequest {
618 pub fn new(keyword: &str) -> DataForSeoLabsRelatedKeywordsRequest {
620 DataForSeoLabsRelatedKeywordsRequest {
621 keyword: keyword.to_string(),
622 ..Default::default()
623 }
624 }
625}
626
627#[derive(Debug, Default, Serialize, Deserialize, Clone)]
630pub struct DataForSeoLabsKeywordsForSiteRequest {
631 pub target: String,
633 #[serde(skip_serializing_if = "Option::is_none")]
635 pub location_name: Option<String>,
636 #[serde(skip_serializing_if = "Option::is_none")]
638 pub location_code: Option<i32>,
639 #[serde(skip_serializing_if = "Option::is_none")]
641 pub language_name: Option<String>,
642 #[serde(skip_serializing_if = "Option::is_none")]
644 pub language_code: Option<String>,
645 #[serde(skip_serializing_if = "Option::is_none")]
647 pub target_type: Option<String>,
648 #[serde(skip_serializing_if = "Option::is_none")]
650 pub include_serp_info: Option<bool>,
651 #[serde(skip_serializing_if = "Option::is_none")]
653 pub include_subdomains: Option<bool>,
654 #[serde(skip_serializing_if = "Option::is_none")]
656 pub include_clickstream_data: Option<bool>,
657 #[serde(skip_serializing_if = "Option::is_none")]
659 pub ignore_synonyms: Option<bool>,
660 #[serde(skip_serializing_if = "Option::is_none")]
662 pub filters: Option<Vec<Value>>,
663 #[serde(skip_serializing_if = "Option::is_none")]
665 pub order_by: Option<Vec<String>>,
666 #[serde(skip_serializing_if = "Option::is_none")]
668 pub limit: Option<i32>,
669 #[serde(skip_serializing_if = "Option::is_none")]
671 pub offset: Option<i32>,
672 #[serde(skip_serializing_if = "Option::is_none")]
674 pub tag: Option<String>,
675}
676
677impl DataForSeoLabsKeywordsForSiteRequest {
678 pub fn new(target: &str) -> DataForSeoLabsKeywordsForSiteRequest {
680 DataForSeoLabsKeywordsForSiteRequest {
681 target: target.to_string(),
682 ..Default::default()
683 }
684 }
685}
686
687#[derive(Debug, Default, Serialize, Deserialize, Clone)]
690pub struct DataForSeoLabsBulkKeywordDifficultyRequest {
691 pub keywords: Vec<String>,
693 #[serde(skip_serializing_if = "Option::is_none")]
695 pub location_name: Option<String>,
696 #[serde(skip_serializing_if = "Option::is_none")]
698 pub location_code: Option<i32>,
699 #[serde(skip_serializing_if = "Option::is_none")]
701 pub language_name: Option<String>,
702 #[serde(skip_serializing_if = "Option::is_none")]
704 pub language_code: Option<String>,
705 #[serde(skip_serializing_if = "Option::is_none")]
707 pub tag: Option<String>,
708}
709
710impl DataForSeoLabsBulkKeywordDifficultyRequest {
711 pub fn new(keywords: Vec<String>) -> DataForSeoLabsBulkKeywordDifficultyRequest {
713 DataForSeoLabsBulkKeywordDifficultyRequest {
714 keywords,
715 ..Default::default()
716 }
717 }
718}
719
720#[derive(Debug, Default, Serialize, Deserialize, Clone)]
723pub struct DataForSeoLabsSearchIntentRequest {
724 pub keywords: Vec<String>,
726 #[serde(skip_serializing_if = "Option::is_none")]
728 pub language_name: Option<String>,
729 #[serde(skip_serializing_if = "Option::is_none")]
731 pub language_code: Option<String>,
732 #[serde(skip_serializing_if = "Option::is_none")]
734 pub tag: Option<String>,
735}
736
737impl DataForSeoLabsSearchIntentRequest {
738 pub fn new(keywords: Vec<String>) -> DataForSeoLabsSearchIntentRequest {
740 DataForSeoLabsSearchIntentRequest {
741 keywords,
742 ..Default::default()
743 }
744 }
745}
746
747#[derive(Debug, Default, Serialize, Deserialize, Clone)]
750pub struct DataForSeoLabsKeywordOverviewRequest {
751 pub keywords: Vec<String>,
753 #[serde(skip_serializing_if = "Option::is_none")]
755 pub location_name: Option<String>,
756 #[serde(skip_serializing_if = "Option::is_none")]
758 pub location_code: Option<i32>,
759 #[serde(skip_serializing_if = "Option::is_none")]
761 pub language_name: Option<String>,
762 #[serde(skip_serializing_if = "Option::is_none")]
764 pub language_code: Option<String>,
765 #[serde(skip_serializing_if = "Option::is_none")]
767 pub include_serp_info: Option<bool>,
768 #[serde(skip_serializing_if = "Option::is_none")]
770 pub include_clickstream_data: Option<bool>,
771 #[serde(skip_serializing_if = "Option::is_none")]
773 pub tag: Option<String>,
774}
775
776impl DataForSeoLabsKeywordOverviewRequest {
777 pub fn new(keywords: Vec<String>) -> DataForSeoLabsKeywordOverviewRequest {
779 DataForSeoLabsKeywordOverviewRequest {
780 keywords,
781 ..Default::default()
782 }
783 }
784}
785
786#[derive(Debug, Default, Serialize, Deserialize, Clone)]
789pub struct DataForSeoLabsHistoricalKeywordDataRequest {
790 pub keywords: Vec<String>,
792 #[serde(skip_serializing_if = "Option::is_none")]
794 pub location_name: Option<String>,
795 #[serde(skip_serializing_if = "Option::is_none")]
797 pub location_code: Option<i32>,
798 #[serde(skip_serializing_if = "Option::is_none")]
800 pub language_name: Option<String>,
801 #[serde(skip_serializing_if = "Option::is_none")]
803 pub language_code: Option<String>,
804 #[serde(skip_serializing_if = "Option::is_none")]
806 pub tag: Option<String>,
807}
808
809impl DataForSeoLabsHistoricalKeywordDataRequest {
810 pub fn new(keywords: Vec<String>) -> DataForSeoLabsHistoricalKeywordDataRequest {
812 DataForSeoLabsHistoricalKeywordDataRequest {
813 keywords,
814 ..Default::default()
815 }
816 }
817}
818
819#[derive(Debug, Default, Serialize, Deserialize, Clone)]
822pub struct DataForSeoLabsHistoricalSerpsRequest {
823 pub keyword: String,
825 #[serde(skip_serializing_if = "Option::is_none")]
827 pub location_name: Option<String>,
828 #[serde(skip_serializing_if = "Option::is_none")]
830 pub location_code: Option<i32>,
831 #[serde(skip_serializing_if = "Option::is_none")]
833 pub language_name: Option<String>,
834 #[serde(skip_serializing_if = "Option::is_none")]
836 pub language_code: Option<String>,
837 #[serde(skip_serializing_if = "Option::is_none")]
839 pub date_from: Option<String>,
840 #[serde(skip_serializing_if = "Option::is_none")]
842 pub date_to: Option<String>,
843 #[serde(skip_serializing_if = "Option::is_none")]
845 pub tag: Option<String>,
846}
847
848impl DataForSeoLabsHistoricalSerpsRequest {
849 pub fn new(keyword: &str) -> DataForSeoLabsHistoricalSerpsRequest {
851 DataForSeoLabsHistoricalSerpsRequest {
852 keyword: keyword.to_string(),
853 ..Default::default()
854 }
855 }
856}
857
858#[derive(Debug, Default, Serialize, Deserialize, Clone)]
861pub struct DataForSeoLabsTopSearchesRequest {
862 #[serde(skip_serializing_if = "Option::is_none")]
864 pub location_name: Option<String>,
865 #[serde(skip_serializing_if = "Option::is_none")]
867 pub location_code: Option<i32>,
868 #[serde(skip_serializing_if = "Option::is_none")]
870 pub language_name: Option<String>,
871 #[serde(skip_serializing_if = "Option::is_none")]
873 pub language_code: Option<String>,
874 #[serde(skip_serializing_if = "Option::is_none")]
876 pub include_serp_info: Option<bool>,
877 #[serde(skip_serializing_if = "Option::is_none")]
879 pub include_clickstream_data: Option<bool>,
880 #[serde(skip_serializing_if = "Option::is_none")]
882 pub ignore_synonyms: Option<bool>,
883 #[serde(skip_serializing_if = "Option::is_none")]
885 pub filters: Option<Vec<Value>>,
886 #[serde(skip_serializing_if = "Option::is_none")]
888 pub order_by: Option<Vec<String>>,
889 #[serde(skip_serializing_if = "Option::is_none")]
891 pub limit: Option<i32>,
892 #[serde(skip_serializing_if = "Option::is_none")]
894 pub offset: Option<i32>,
895 #[serde(skip_serializing_if = "Option::is_none")]
897 pub offset_token: Option<String>,
898 #[serde(skip_serializing_if = "Option::is_none")]
900 pub tag: Option<String>,
901}
902
903impl DataForSeoLabsTopSearchesRequest {
904 pub fn new() -> DataForSeoLabsTopSearchesRequest {
906 DataForSeoLabsTopSearchesRequest::default()
907 }
908}
909
910#[derive(Debug, Default, Serialize, Deserialize, Clone)]
913pub struct DataForSeoLabsSerpCompetitorsRequest {
914 pub keywords: Vec<String>,
916 #[serde(skip_serializing_if = "Option::is_none")]
918 pub location_name: Option<String>,
919 #[serde(skip_serializing_if = "Option::is_none")]
921 pub location_code: Option<i32>,
922 #[serde(skip_serializing_if = "Option::is_none")]
924 pub language_name: Option<String>,
925 #[serde(skip_serializing_if = "Option::is_none")]
927 pub language_code: Option<String>,
928 #[serde(skip_serializing_if = "Option::is_none")]
930 pub include_subdomains: Option<bool>,
931 #[serde(skip_serializing_if = "Option::is_none")]
933 pub item_types: Option<Vec<String>>,
934 #[serde(skip_serializing_if = "Option::is_none")]
936 pub filters: Option<Vec<Value>>,
937 #[serde(skip_serializing_if = "Option::is_none")]
939 pub order_by: Option<Vec<String>>,
940 #[serde(skip_serializing_if = "Option::is_none")]
942 pub limit: Option<i32>,
943 #[serde(skip_serializing_if = "Option::is_none")]
945 pub offset: Option<i32>,
946 #[serde(skip_serializing_if = "Option::is_none")]
948 pub tag: Option<String>,
949}
950
951impl DataForSeoLabsSerpCompetitorsRequest {
952 pub fn new(keywords: Vec<String>) -> DataForSeoLabsSerpCompetitorsRequest {
954 DataForSeoLabsSerpCompetitorsRequest {
955 keywords,
956 ..Default::default()
957 }
958 }
959}
960
961#[derive(Debug, Default, Serialize, Deserialize, Clone)]
964pub struct DataForSeoLabsCompetitorsDomainRequest {
965 pub target: String,
967 #[serde(skip_serializing_if = "Option::is_none")]
969 pub location_name: Option<String>,
970 #[serde(skip_serializing_if = "Option::is_none")]
972 pub location_code: Option<i32>,
973 #[serde(skip_serializing_if = "Option::is_none")]
975 pub language_name: Option<String>,
976 #[serde(skip_serializing_if = "Option::is_none")]
978 pub language_code: Option<String>,
979 #[serde(skip_serializing_if = "Option::is_none")]
981 pub item_types: Option<Vec<String>>,
982 #[serde(skip_serializing_if = "Option::is_none")]
984 pub include_clickstream_data: Option<bool>,
985 #[serde(skip_serializing_if = "Option::is_none")]
987 pub max_rank_group: Option<i64>,
988 #[serde(skip_serializing_if = "Option::is_none")]
990 pub exclude_top_domains: Option<bool>,
991 #[serde(skip_serializing_if = "Option::is_none")]
993 pub exclude_domains: Option<Vec<String>>,
994 #[serde(skip_serializing_if = "Option::is_none")]
996 pub intersecting_domains: Option<Vec<String>>,
997 #[serde(skip_serializing_if = "Option::is_none")]
999 pub ignore_synonyms: Option<bool>,
1000 #[serde(skip_serializing_if = "Option::is_none")]
1002 pub filters: Option<Vec<Value>>,
1003 #[serde(skip_serializing_if = "Option::is_none")]
1005 pub order_by: Option<Vec<String>>,
1006 #[serde(skip_serializing_if = "Option::is_none")]
1008 pub limit: Option<i32>,
1009 #[serde(skip_serializing_if = "Option::is_none")]
1011 pub offset: Option<i32>,
1012 #[serde(skip_serializing_if = "Option::is_none")]
1014 pub tag: Option<String>,
1015}
1016
1017impl DataForSeoLabsCompetitorsDomainRequest {
1018 pub fn new(target: &str) -> DataForSeoLabsCompetitorsDomainRequest {
1020 DataForSeoLabsCompetitorsDomainRequest {
1021 target: target.to_string(),
1022 ..Default::default()
1023 }
1024 }
1025}
1026
1027#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1030pub struct DataForSeoLabsDomainIntersectionRequest {
1031 pub target1: String,
1033 pub target2: String,
1035 #[serde(skip_serializing_if = "Option::is_none")]
1037 pub location_name: Option<String>,
1038 #[serde(skip_serializing_if = "Option::is_none")]
1040 pub location_code: Option<i32>,
1041 #[serde(skip_serializing_if = "Option::is_none")]
1043 pub language_name: Option<String>,
1044 #[serde(skip_serializing_if = "Option::is_none")]
1046 pub language_code: Option<String>,
1047 #[serde(skip_serializing_if = "Option::is_none")]
1049 pub intersections: Option<bool>,
1050 #[serde(skip_serializing_if = "Option::is_none")]
1052 pub item_types: Option<Vec<String>>,
1053 #[serde(skip_serializing_if = "Option::is_none")]
1055 pub include_serp_info: Option<bool>,
1056 #[serde(skip_serializing_if = "Option::is_none")]
1058 pub include_clickstream_data: Option<bool>,
1059 #[serde(skip_serializing_if = "Option::is_none")]
1061 pub filters: Option<Vec<Value>>,
1062 #[serde(skip_serializing_if = "Option::is_none")]
1064 pub order_by: Option<Vec<String>>,
1065 #[serde(skip_serializing_if = "Option::is_none")]
1067 pub limit: Option<i32>,
1068 #[serde(skip_serializing_if = "Option::is_none")]
1070 pub offset: Option<i32>,
1071 #[serde(skip_serializing_if = "Option::is_none")]
1073 pub tag: Option<String>,
1074}
1075
1076impl DataForSeoLabsDomainIntersectionRequest {
1077 pub fn new(target1: &str, target2: &str) -> DataForSeoLabsDomainIntersectionRequest {
1079 DataForSeoLabsDomainIntersectionRequest {
1080 target1: target1.to_string(),
1081 target2: target2.to_string(),
1082 ..Default::default()
1083 }
1084 }
1085}
1086
1087#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1090pub struct DataForSeoLabsSubdomainsRequest {
1091 pub target: String,
1093 #[serde(skip_serializing_if = "Option::is_none")]
1095 pub location_name: Option<String>,
1096 #[serde(skip_serializing_if = "Option::is_none")]
1098 pub location_code: Option<i32>,
1099 #[serde(skip_serializing_if = "Option::is_none")]
1101 pub language_name: Option<String>,
1102 #[serde(skip_serializing_if = "Option::is_none")]
1104 pub language_code: Option<String>,
1105 #[serde(skip_serializing_if = "Option::is_none")]
1107 pub item_types: Option<Vec<String>>,
1108 #[serde(skip_serializing_if = "Option::is_none")]
1110 pub include_clickstream_data: Option<bool>,
1111 #[serde(skip_serializing_if = "Option::is_none")]
1113 pub historical_serp_mode: Option<String>,
1114 #[serde(skip_serializing_if = "Option::is_none")]
1116 pub ignore_synonyms: Option<bool>,
1117 #[serde(skip_serializing_if = "Option::is_none")]
1119 pub filters: Option<Vec<Value>>,
1120 #[serde(skip_serializing_if = "Option::is_none")]
1122 pub order_by: Option<Vec<String>>,
1123 #[serde(skip_serializing_if = "Option::is_none")]
1125 pub limit: Option<i32>,
1126 #[serde(skip_serializing_if = "Option::is_none")]
1128 pub offset: Option<i32>,
1129 #[serde(skip_serializing_if = "Option::is_none")]
1131 pub tag: Option<String>,
1132}
1133
1134impl DataForSeoLabsSubdomainsRequest {
1135 pub fn new(target: &str) -> DataForSeoLabsSubdomainsRequest {
1137 DataForSeoLabsSubdomainsRequest {
1138 target: target.to_string(),
1139 ..Default::default()
1140 }
1141 }
1142}
1143
1144#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1147pub struct DataForSeoLabsRelevantPagesRequest {
1148 pub target: String,
1150 #[serde(skip_serializing_if = "Option::is_none")]
1152 pub location_name: Option<String>,
1153 #[serde(skip_serializing_if = "Option::is_none")]
1155 pub location_code: Option<i32>,
1156 #[serde(skip_serializing_if = "Option::is_none")]
1158 pub language_name: Option<String>,
1159 #[serde(skip_serializing_if = "Option::is_none")]
1161 pub language_code: Option<String>,
1162 #[serde(skip_serializing_if = "Option::is_none")]
1164 pub item_types: Option<Vec<String>>,
1165 #[serde(skip_serializing_if = "Option::is_none")]
1167 pub include_clickstream_data: Option<bool>,
1168 #[serde(skip_serializing_if = "Option::is_none")]
1170 pub filters: Option<Vec<Value>>,
1171 #[serde(skip_serializing_if = "Option::is_none")]
1173 pub order_by: Option<Vec<String>>,
1174 #[serde(skip_serializing_if = "Option::is_none")]
1176 pub limit: Option<i32>,
1177 #[serde(skip_serializing_if = "Option::is_none")]
1179 pub offset: Option<i32>,
1180 #[serde(skip_serializing_if = "Option::is_none")]
1182 pub tag: Option<String>,
1183}
1184
1185impl DataForSeoLabsRelevantPagesRequest {
1186 pub fn new(target: &str) -> DataForSeoLabsRelevantPagesRequest {
1188 DataForSeoLabsRelevantPagesRequest {
1189 target: target.to_string(),
1190 ..Default::default()
1191 }
1192 }
1193}
1194
1195#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1198pub struct DataForSeoLabsDomainRankOverviewRequest {
1199 pub target: String,
1201 #[serde(skip_serializing_if = "Option::is_none")]
1203 pub location_name: Option<String>,
1204 #[serde(skip_serializing_if = "Option::is_none")]
1206 pub location_code: Option<i32>,
1207 #[serde(skip_serializing_if = "Option::is_none")]
1209 pub language_name: Option<String>,
1210 #[serde(skip_serializing_if = "Option::is_none")]
1212 pub language_code: Option<String>,
1213 #[serde(skip_serializing_if = "Option::is_none")]
1215 pub ignore_synonyms: Option<bool>,
1216 #[serde(skip_serializing_if = "Option::is_none")]
1218 pub limit: Option<i32>,
1219 #[serde(skip_serializing_if = "Option::is_none")]
1221 pub offset: Option<i32>,
1222 #[serde(skip_serializing_if = "Option::is_none")]
1224 pub tag: Option<String>,
1225}
1226
1227impl DataForSeoLabsDomainRankOverviewRequest {
1228 pub fn new(target: &str) -> DataForSeoLabsDomainRankOverviewRequest {
1230 DataForSeoLabsDomainRankOverviewRequest {
1231 target: target.to_string(),
1232 ..Default::default()
1233 }
1234 }
1235}
1236
1237#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1240pub struct DataForSeoLabsPageIntersectionRequest {
1241 pub pages: HashMap<String, String>,
1243 #[serde(skip_serializing_if = "Option::is_none")]
1245 pub exclude_pages: Option<Vec<String>>,
1246 #[serde(skip_serializing_if = "Option::is_none")]
1248 pub location_name: Option<String>,
1249 #[serde(skip_serializing_if = "Option::is_none")]
1251 pub location_code: Option<i32>,
1252 #[serde(skip_serializing_if = "Option::is_none")]
1254 pub language_name: Option<String>,
1255 #[serde(skip_serializing_if = "Option::is_none")]
1257 pub language_code: Option<String>,
1258 #[serde(skip_serializing_if = "Option::is_none")]
1260 pub item_types: Option<Vec<String>>,
1261 #[serde(skip_serializing_if = "Option::is_none")]
1263 pub intersection_mode: Option<String>,
1264 #[serde(skip_serializing_if = "Option::is_none")]
1266 pub include_serp_info: Option<bool>,
1267 #[serde(skip_serializing_if = "Option::is_none")]
1269 pub include_clickstream_data: Option<bool>,
1270 #[serde(skip_serializing_if = "Option::is_none")]
1272 pub filters: Option<Vec<Value>>,
1273 #[serde(skip_serializing_if = "Option::is_none")]
1275 pub order_by: Option<Vec<String>>,
1276 #[serde(skip_serializing_if = "Option::is_none")]
1278 pub limit: Option<i32>,
1279 #[serde(skip_serializing_if = "Option::is_none")]
1281 pub offset: Option<i32>,
1282 #[serde(skip_serializing_if = "Option::is_none")]
1284 pub tag: Option<String>,
1285}
1286
1287impl DataForSeoLabsPageIntersectionRequest {
1288 pub fn new(pages: HashMap<String, String>) -> DataForSeoLabsPageIntersectionRequest {
1290 DataForSeoLabsPageIntersectionRequest {
1291 pages,
1292 ..Default::default()
1293 }
1294 }
1295}
1296
1297#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1300pub struct DataForSeoLabsBulkTrafficEstimationRequest {
1301 pub targets: Vec<String>,
1303 #[serde(skip_serializing_if = "Option::is_none")]
1305 pub location_name: Option<String>,
1306 #[serde(skip_serializing_if = "Option::is_none")]
1308 pub location_code: Option<i32>,
1309 #[serde(skip_serializing_if = "Option::is_none")]
1311 pub language_name: Option<String>,
1312 #[serde(skip_serializing_if = "Option::is_none")]
1314 pub language_code: Option<String>,
1315 #[serde(skip_serializing_if = "Option::is_none")]
1317 pub item_types: Option<Vec<String>>,
1318 #[serde(skip_serializing_if = "Option::is_none")]
1320 pub ignore_synonyms: Option<bool>,
1321 #[serde(skip_serializing_if = "Option::is_none")]
1323 pub tag: Option<String>,
1324}
1325
1326impl DataForSeoLabsBulkTrafficEstimationRequest {
1327 pub fn new(targets: Vec<String>) -> DataForSeoLabsBulkTrafficEstimationRequest {
1329 DataForSeoLabsBulkTrafficEstimationRequest {
1330 targets,
1331 ..Default::default()
1332 }
1333 }
1334}
1335
1336#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1339pub struct DataForSeoLabsHistoricalBulkTrafficEstimationRequest {
1340 pub targets: Vec<String>,
1342 #[serde(skip_serializing_if = "Option::is_none")]
1344 pub location_name: Option<String>,
1345 #[serde(skip_serializing_if = "Option::is_none")]
1347 pub location_code: Option<i32>,
1348 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub language_name: Option<String>,
1351 #[serde(skip_serializing_if = "Option::is_none")]
1353 pub language_code: Option<String>,
1354 #[serde(skip_serializing_if = "Option::is_none")]
1356 pub date_from: Option<String>,
1357 #[serde(skip_serializing_if = "Option::is_none")]
1359 pub date_to: Option<String>,
1360 #[serde(skip_serializing_if = "Option::is_none")]
1362 pub ignore_synonyms: Option<bool>,
1363 #[serde(skip_serializing_if = "Option::is_none")]
1365 pub item_types: Option<Vec<String>>,
1366 #[serde(skip_serializing_if = "Option::is_none")]
1368 pub tag: Option<String>,
1369}
1370
1371impl DataForSeoLabsHistoricalBulkTrafficEstimationRequest {
1372 pub fn new(targets: Vec<String>) -> DataForSeoLabsHistoricalBulkTrafficEstimationRequest {
1374 DataForSeoLabsHistoricalBulkTrafficEstimationRequest {
1375 targets,
1376 ..Default::default()
1377 }
1378 }
1379}
1380
1381#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1384pub struct DataForSeoLabsHistoricalRankOverviewRequest {
1385 pub target: String,
1387 #[serde(skip_serializing_if = "Option::is_none")]
1389 pub location_name: Option<String>,
1390 #[serde(skip_serializing_if = "Option::is_none")]
1392 pub location_code: Option<i32>,
1393 #[serde(skip_serializing_if = "Option::is_none")]
1395 pub language_name: Option<String>,
1396 #[serde(skip_serializing_if = "Option::is_none")]
1398 pub language_code: Option<String>,
1399 #[serde(skip_serializing_if = "Option::is_none")]
1401 pub date_from: Option<String>,
1402 #[serde(skip_serializing_if = "Option::is_none")]
1404 pub date_to: Option<String>,
1405 #[serde(skip_serializing_if = "Option::is_none")]
1407 pub correlate: Option<bool>,
1408 #[serde(skip_serializing_if = "Option::is_none")]
1410 pub ignore_synonyms: Option<bool>,
1411 #[serde(skip_serializing_if = "Option::is_none")]
1413 pub include_clickstream_data: Option<bool>,
1414 #[serde(skip_serializing_if = "Option::is_none")]
1416 pub tag: Option<String>,
1417}
1418
1419impl DataForSeoLabsHistoricalRankOverviewRequest {
1420 pub fn new(target: &str) -> DataForSeoLabsHistoricalRankOverviewRequest {
1422 DataForSeoLabsHistoricalRankOverviewRequest {
1423 target: target.to_string(),
1424 ..Default::default()
1425 }
1426 }
1427}
1428
1429#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1432pub struct DataForSeoLabsCategoriesForDomainRequest {
1433 pub target: String,
1435 #[serde(skip_serializing_if = "Option::is_none")]
1437 pub location_name: Option<String>,
1438 #[serde(skip_serializing_if = "Option::is_none")]
1440 pub location_code: Option<i32>,
1441 #[serde(skip_serializing_if = "Option::is_none")]
1443 pub language_name: Option<String>,
1444 #[serde(skip_serializing_if = "Option::is_none")]
1446 pub language_code: Option<String>,
1447 #[serde(skip_serializing_if = "Option::is_none")]
1449 pub include_subcategories: Option<bool>,
1450 #[serde(skip_serializing_if = "Option::is_none")]
1452 pub include_clickstream_data: Option<bool>,
1453 #[serde(skip_serializing_if = "Option::is_none")]
1455 pub historical_serp_mode: Option<String>,
1456 #[serde(skip_serializing_if = "Option::is_none")]
1458 pub item_types: Option<Vec<String>>,
1459 #[serde(skip_serializing_if = "Option::is_none")]
1461 pub filters: Option<Vec<Value>>,
1462 #[serde(skip_serializing_if = "Option::is_none")]
1464 pub order_by: Option<Vec<String>>,
1465 #[serde(skip_serializing_if = "Option::is_none")]
1467 pub limit: Option<i32>,
1468 #[serde(skip_serializing_if = "Option::is_none")]
1470 pub offset: Option<i32>,
1471 #[serde(skip_serializing_if = "Option::is_none")]
1473 pub tag: Option<String>,
1474}
1475
1476impl DataForSeoLabsCategoriesForDomainRequest {
1477 pub fn new(target: &str) -> DataForSeoLabsCategoriesForDomainRequest {
1479 DataForSeoLabsCategoriesForDomainRequest {
1480 target: target.to_string(),
1481 ..Default::default()
1482 }
1483 }
1484}
1485
1486#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1489pub struct DataForSeoLabsCategoriesForKeywordsRequest {
1490 pub keywords: Vec<String>,
1492 #[serde(skip_serializing_if = "Option::is_none")]
1494 pub language_name: Option<String>,
1495 #[serde(skip_serializing_if = "Option::is_none")]
1497 pub language_code: Option<String>,
1498 #[serde(skip_serializing_if = "Option::is_none")]
1500 pub tag: Option<String>,
1501}
1502
1503impl DataForSeoLabsCategoriesForKeywordsRequest {
1504 pub fn new(keywords: Vec<String>) -> DataForSeoLabsCategoriesForKeywordsRequest {
1506 DataForSeoLabsCategoriesForKeywordsRequest {
1507 keywords,
1508 ..Default::default()
1509 }
1510 }
1511}
1512
1513#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1516pub struct DataForSeoLabsKeywordsForCategoriesRequest {
1517 pub category_codes: Vec<String>,
1519 #[serde(skip_serializing_if = "Option::is_none")]
1521 pub location_name: Option<String>,
1522 #[serde(skip_serializing_if = "Option::is_none")]
1524 pub location_code: Option<i32>,
1525 #[serde(skip_serializing_if = "Option::is_none")]
1527 pub language_name: Option<String>,
1528 #[serde(skip_serializing_if = "Option::is_none")]
1530 pub language_code: Option<String>,
1531 #[serde(skip_serializing_if = "Option::is_none")]
1533 pub category_intersection: Option<bool>,
1534 #[serde(skip_serializing_if = "Option::is_none")]
1536 pub include_serp_info: Option<bool>,
1537 #[serde(skip_serializing_if = "Option::is_none")]
1539 pub include_clickstream_data: Option<bool>,
1540 #[serde(skip_serializing_if = "Option::is_none")]
1542 pub ignore_synonyms: Option<bool>,
1543 #[serde(skip_serializing_if = "Option::is_none")]
1545 pub filters: Option<Vec<Value>>,
1546 #[serde(skip_serializing_if = "Option::is_none")]
1548 pub order_by: Option<Vec<String>>,
1549 #[serde(skip_serializing_if = "Option::is_none")]
1551 pub limit: Option<i32>,
1552 #[serde(skip_serializing_if = "Option::is_none")]
1554 pub offset: Option<i32>,
1555 #[serde(skip_serializing_if = "Option::is_none")]
1557 pub offset_token: Option<String>,
1558 #[serde(skip_serializing_if = "Option::is_none")]
1560 pub tag: Option<String>,
1561}
1562
1563impl DataForSeoLabsKeywordsForCategoriesRequest {
1564 pub fn new(category_codes: Vec<String>) -> DataForSeoLabsKeywordsForCategoriesRequest {
1566 DataForSeoLabsKeywordsForCategoriesRequest {
1567 category_codes,
1568 ..Default::default()
1569 }
1570 }
1571}
1572
1573#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1576pub struct DataForSeoLabsDomainMetricsByCategoriesRequest {
1577 pub category_codes: Vec<String>,
1579 #[serde(skip_serializing_if = "Option::is_none")]
1581 pub first_date: Option<String>,
1582 #[serde(skip_serializing_if = "Option::is_none")]
1584 pub second_date: Option<String>,
1585 #[serde(skip_serializing_if = "Option::is_none")]
1587 pub location_name: Option<String>,
1588 #[serde(skip_serializing_if = "Option::is_none")]
1590 pub location_code: Option<i32>,
1591 #[serde(skip_serializing_if = "Option::is_none")]
1593 pub language_name: Option<String>,
1594 #[serde(skip_serializing_if = "Option::is_none")]
1596 pub language_code: Option<String>,
1597 #[serde(skip_serializing_if = "Option::is_none")]
1599 pub item_types: Option<Vec<String>>,
1600 #[serde(skip_serializing_if = "Option::is_none")]
1602 pub top_categories_count: Option<i64>,
1603 #[serde(skip_serializing_if = "Option::is_none")]
1605 pub include_subdomains: Option<bool>,
1606 #[serde(skip_serializing_if = "Option::is_none")]
1608 pub etv_min: Option<i64>,
1609 #[serde(skip_serializing_if = "Option::is_none")]
1611 pub etv_max: Option<i64>,
1612 #[serde(skip_serializing_if = "Option::is_none")]
1614 pub correlate: Option<bool>,
1615 #[serde(skip_serializing_if = "Option::is_none")]
1617 pub filters: Option<Vec<Value>>,
1618 #[serde(skip_serializing_if = "Option::is_none")]
1620 pub order_by: Option<Vec<String>>,
1621 #[serde(skip_serializing_if = "Option::is_none")]
1623 pub limit: Option<i32>,
1624 #[serde(skip_serializing_if = "Option::is_none")]
1626 pub offset: Option<i32>,
1627 #[serde(skip_serializing_if = "Option::is_none")]
1629 pub tag: Option<String>,
1630}
1631
1632impl DataForSeoLabsDomainMetricsByCategoriesRequest {
1633 pub fn new(category_codes: Vec<String>) -> DataForSeoLabsDomainMetricsByCategoriesRequest {
1635 DataForSeoLabsDomainMetricsByCategoriesRequest {
1636 category_codes,
1637 ..Default::default()
1638 }
1639 }
1640}
1641
1642#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1645pub struct DataForSeoLabsKeywordsForAppRequest {
1646 pub app_id: String,
1648 #[serde(skip_serializing_if = "Option::is_none")]
1650 pub location_name: Option<String>,
1651 #[serde(skip_serializing_if = "Option::is_none")]
1653 pub location_code: Option<i32>,
1654 #[serde(skip_serializing_if = "Option::is_none")]
1656 pub language_name: Option<String>,
1657 #[serde(skip_serializing_if = "Option::is_none")]
1659 pub language_code: Option<String>,
1660 #[serde(skip_serializing_if = "Option::is_none")]
1662 pub filters: Option<Vec<Value>>,
1663 #[serde(skip_serializing_if = "Option::is_none")]
1665 pub order_by: Option<Vec<String>>,
1666 #[serde(skip_serializing_if = "Option::is_none")]
1668 pub limit: Option<i32>,
1669 #[serde(skip_serializing_if = "Option::is_none")]
1671 pub offset: Option<i32>,
1672 #[serde(skip_serializing_if = "Option::is_none")]
1674 pub tag: Option<String>,
1675}
1676
1677impl DataForSeoLabsKeywordsForAppRequest {
1678 pub fn new(app_id: &str) -> DataForSeoLabsKeywordsForAppRequest {
1680 DataForSeoLabsKeywordsForAppRequest {
1681 app_id: app_id.to_string(),
1682 ..Default::default()
1683 }
1684 }
1685}
1686
1687#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1690pub struct DataForSeoLabsAppCompetitorsRequest {
1691 pub app_id: String,
1693 #[serde(skip_serializing_if = "Option::is_none")]
1695 pub location_name: Option<String>,
1696 #[serde(skip_serializing_if = "Option::is_none")]
1698 pub location_code: Option<i32>,
1699 #[serde(skip_serializing_if = "Option::is_none")]
1701 pub language_name: Option<String>,
1702 #[serde(skip_serializing_if = "Option::is_none")]
1704 pub language_code: Option<String>,
1705 #[serde(skip_serializing_if = "Option::is_none")]
1707 pub filters: Option<Vec<Value>>,
1708 #[serde(skip_serializing_if = "Option::is_none")]
1710 pub order_by: Option<Vec<String>>,
1711 #[serde(skip_serializing_if = "Option::is_none")]
1713 pub limit: Option<i32>,
1714 #[serde(skip_serializing_if = "Option::is_none")]
1716 pub offset: Option<i32>,
1717 #[serde(skip_serializing_if = "Option::is_none")]
1719 pub tag: Option<String>,
1720}
1721
1722impl DataForSeoLabsAppCompetitorsRequest {
1723 pub fn new(app_id: &str) -> DataForSeoLabsAppCompetitorsRequest {
1725 DataForSeoLabsAppCompetitorsRequest {
1726 app_id: app_id.to_string(),
1727 ..Default::default()
1728 }
1729 }
1730}
1731
1732#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1735pub struct DataForSeoLabsAppIntersectionRequest {
1736 pub app_ids: HashMap<String, String>,
1738 #[serde(skip_serializing_if = "Option::is_none")]
1740 pub location_name: Option<String>,
1741 #[serde(skip_serializing_if = "Option::is_none")]
1743 pub location_code: Option<i32>,
1744 #[serde(skip_serializing_if = "Option::is_none")]
1746 pub language_name: Option<String>,
1747 #[serde(skip_serializing_if = "Option::is_none")]
1749 pub language_code: Option<String>,
1750 #[serde(skip_serializing_if = "Option::is_none")]
1752 pub filters: Option<Vec<Value>>,
1753 #[serde(skip_serializing_if = "Option::is_none")]
1755 pub order_by: Option<Vec<String>>,
1756 #[serde(skip_serializing_if = "Option::is_none")]
1758 pub limit: Option<i32>,
1759 #[serde(skip_serializing_if = "Option::is_none")]
1761 pub offset: Option<i32>,
1762 #[serde(skip_serializing_if = "Option::is_none")]
1764 pub tag: Option<String>,
1765}
1766
1767impl DataForSeoLabsAppIntersectionRequest {
1768 pub fn new(app_ids: HashMap<String, String>) -> DataForSeoLabsAppIntersectionRequest {
1770 DataForSeoLabsAppIntersectionRequest {
1771 app_ids,
1772 ..Default::default()
1773 }
1774 }
1775}
1776
1777#[derive(Debug, Default, Serialize, Deserialize, Clone)]
1780pub struct DataForSeoLabsBulkAppMetricsRequest {
1781 pub app_ids: Vec<String>,
1783 #[serde(skip_serializing_if = "Option::is_none")]
1785 pub location_name: Option<String>,
1786 #[serde(skip_serializing_if = "Option::is_none")]
1788 pub location_code: Option<i32>,
1789 #[serde(skip_serializing_if = "Option::is_none")]
1791 pub language_name: Option<String>,
1792 #[serde(skip_serializing_if = "Option::is_none")]
1794 pub language_code: Option<String>,
1795 #[serde(skip_serializing_if = "Option::is_none")]
1797 pub tag: Option<String>,
1798}
1799
1800impl DataForSeoLabsBulkAppMetricsRequest {
1801 pub fn new(app_ids: Vec<String>) -> DataForSeoLabsBulkAppMetricsRequest {
1803 DataForSeoLabsBulkAppMetricsRequest {
1804 app_ids,
1805 ..Default::default()
1806 }
1807 }
1808}