data_for_seo/api/dataforseo_labs/
mod.rs1mod amazon;
5mod apple;
6mod google;
7
8pub use amazon::*;
9pub use apple::*;
10pub use google::*;
11
12use crate::entity::{
13 DataForSeoLabsCategory, DataForSeoLabsIdListItem, DataForSeoLabsLocation, DataForSeoLabsStatus,
14};
15use crate::{DataForSeoApiResponse, DataForSeoClient};
16use serde::{Deserialize, Serialize};
17
18pub struct DataForSeoLabsApi<'a> {
20 client: &'a DataForSeoClient,
21}
22
23impl DataForSeoClient {
24 pub fn dataforseo_labs(&self) -> DataForSeoLabsApi<'_> {
27 DataForSeoLabsApi { client: self }
28 }
29}
30
31impl<'a> DataForSeoLabsApi<'a> {
32 pub fn google(&self) -> DataForSeoLabsApiGoogle<'a> {
35 DataForSeoLabsApiGoogle {
36 client: self.client,
37 }
38 }
39
40 pub fn amazon(&self) -> DataForSeoLabsApiAmazon<'a> {
43 DataForSeoLabsApiAmazon {
44 client: self.client,
45 }
46 }
47
48 pub fn apple(&self) -> DataForSeoLabsApiApple<'a> {
51 DataForSeoLabsApiApple {
52 client: self.client,
53 }
54 }
55
56 pub async fn id_list(
59 &self,
60 data: Vec<DataForSeoLabsIdListRequest>,
61 ) -> DataForSeoApiResponse<DataForSeoLabsIdListItem> {
62 self.client
63 .http_post("/v3/dataforseo_labs/id_list", &data)
64 .await
65 }
66
67 pub async fn locations_and_languages(&self) -> DataForSeoApiResponse<DataForSeoLabsLocation> {
70 self.client
71 .http_get("/v3/dataforseo_labs/locations_and_languages")
72 .await
73 }
74
75 pub async fn categories(&self) -> DataForSeoApiResponse<DataForSeoLabsCategory> {
78 self.client.http_get("/v3/dataforseo_labs/categories").await
79 }
80
81 pub async fn status(&self) -> DataForSeoApiResponse<DataForSeoLabsStatus> {
84 self.client.http_get("/v3/dataforseo_labs/status").await
85 }
86}
87
88#[derive(Debug, Default, Serialize, Deserialize, Clone)]
91pub struct DataForSeoLabsIdListRequest {
92 pub datetime_from: String,
94 pub datetime_to: String,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub limit: Option<i32>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub offset: Option<i32>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub sort: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub include_metadata: Option<bool>,
108}
109
110impl DataForSeoLabsIdListRequest {
111 pub fn new(datetime_from: &str, datetime_to: &str) -> DataForSeoLabsIdListRequest {
113 DataForSeoLabsIdListRequest {
114 datetime_from: datetime_from.to_string(),
115 datetime_to: datetime_to.to_string(),
116 ..Default::default()
117 }
118 }
119}