data_for_seo/api/app_data/
mod.rs1use crate::entity::{AppDataApiError, AppDataApiIdList};
2use crate::{DataForSeoApiResponse, DataForSeoClient};
3use serde::{Deserialize, Serialize};
4
5mod apple;
6mod google;
7
8pub use apple::*;
9pub use google::*;
10
11pub struct AppDataApi<'a> {
14 client: &'a DataForSeoClient,
15}
16
17impl DataForSeoClient {
18 pub fn app_data(&self) -> AppDataApi<'_> {
20 AppDataApi { client: self }
21 }
22}
23
24impl AppDataApi<'_> {
25 pub async fn id_list(
28 &self,
29 data: Vec<AppDataApiIdListPost>,
30 ) -> DataForSeoApiResponse<AppDataApiIdList> {
31 self.client.http_post("/v3/app_data/id_list", &data).await
32 }
33
34 pub async fn errors(
37 &self,
38 data: Vec<AppDataApiErrorsPost>,
39 ) -> DataForSeoApiResponse<AppDataApiError> {
40 self.client.http_post("/v3/app_data/errors", &data).await
41 }
42}
43
44#[derive(Debug, Default, Serialize, Deserialize, Clone)]
47pub struct AppDataApiIdListPost {
48 pub datetime_from: String,
50 pub datetime_to: String,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub limit: Option<i32>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub offset: Option<i32>,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub sort: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub include_metadata: Option<bool>,
64}
65
66impl AppDataApiIdListPost {
67 pub fn new(datetime_from: String, datetime_to: String) -> Self {
69 AppDataApiIdListPost {
70 datetime_from,
71 datetime_to,
72 ..AppDataApiIdListPost::default()
73 }
74 }
75}
76
77#[derive(Debug, Default, Serialize, Deserialize, Clone)]
80pub struct AppDataApiErrorsPost {
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub limit: Option<i32>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub offset: Option<i32>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub filtered_function: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub datetime_from: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub datetime_to: Option<String>,
96}
97
98#[derive(Debug, Default, Serialize, Deserialize, Clone)]
101pub struct AppDataApiAppSearchesTaskPostRequest {
102 pub keyword: String,
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub location_name: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub location_code: Option<i32>,
110 #[serde(skip_serializing_if = "Option::is_none")]
112 pub language_name: Option<String>,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub language_code: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub se_domain: Option<String>,
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub depth: Option<i32>,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub priority: Option<i32>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub tag: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub postback_url: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub postback_data: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub pingback_url: Option<String>,
137}
138
139impl AppDataApiAppSearchesTaskPostRequest {
140 pub fn new(keyword: String, location_code: i32, language_code: String) -> Self {
142 AppDataApiAppSearchesTaskPostRequest {
143 keyword,
144 location_code: Some(location_code),
145 language_code: Some(language_code),
146 ..AppDataApiAppSearchesTaskPostRequest::default()
147 }
148 }
149}
150
151#[derive(Debug, Default, Serialize, Deserialize, Clone)]
154pub struct AppDataApiAppListTaskPostRequest {
155 pub app_collection: String,
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub app_category: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub age_rating: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub location_name: Option<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub location_code: Option<i32>,
169 #[serde(skip_serializing_if = "Option::is_none")]
171 pub language_name: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub language_code: Option<String>,
175 #[serde(skip_serializing_if = "Option::is_none")]
177 pub depth: Option<i32>,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 pub priority: Option<i32>,
181 #[serde(skip_serializing_if = "Option::is_none")]
183 pub tag: Option<String>,
184 #[serde(skip_serializing_if = "Option::is_none")]
186 pub postback_url: Option<String>,
187 #[serde(skip_serializing_if = "Option::is_none")]
189 pub postback_data: Option<String>,
190 #[serde(skip_serializing_if = "Option::is_none")]
192 pub pingback_url: Option<String>,
193}
194
195impl AppDataApiAppListTaskPostRequest {
196 pub fn new(app_collection: String, location_code: i32, language_code: String) -> Self {
198 AppDataApiAppListTaskPostRequest {
199 app_collection,
200 location_code: Some(location_code),
201 language_code: Some(language_code),
202 ..AppDataApiAppListTaskPostRequest::default()
203 }
204 }
205}
206
207#[derive(Debug, Default, Serialize, Deserialize, Clone)]
210pub struct AppDataApiAppInfoTaskPostRequest {
211 pub app_id: String,
213 #[serde(skip_serializing_if = "Option::is_none")]
215 pub location_name: Option<String>,
216 #[serde(skip_serializing_if = "Option::is_none")]
218 pub location_code: Option<i32>,
219 #[serde(skip_serializing_if = "Option::is_none")]
221 pub language_name: Option<String>,
222 #[serde(skip_serializing_if = "Option::is_none")]
224 pub language_code: Option<String>,
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pub priority: Option<i32>,
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub tag: Option<String>,
231 #[serde(skip_serializing_if = "Option::is_none")]
233 pub postback_url: Option<String>,
234 #[serde(skip_serializing_if = "Option::is_none")]
236 pub postback_data: Option<String>,
237 #[serde(skip_serializing_if = "Option::is_none")]
239 pub pingback_url: Option<String>,
240}
241
242impl AppDataApiAppInfoTaskPostRequest {
243 pub fn new(app_id: String, location_code: i32, language_code: String) -> Self {
245 AppDataApiAppInfoTaskPostRequest {
246 app_id,
247 location_code: Some(location_code),
248 language_code: Some(language_code),
249 ..AppDataApiAppInfoTaskPostRequest::default()
250 }
251 }
252}
253
254#[derive(Debug, Default, Serialize, Deserialize, Clone)]
257pub struct AppDataApiAppReviewsTaskPostRequest {
258 pub app_id: String,
260 #[serde(skip_serializing_if = "Option::is_none")]
262 pub location_name: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
265 pub location_code: Option<i32>,
266 #[serde(skip_serializing_if = "Option::is_none")]
268 pub language_name: Option<String>,
269 #[serde(skip_serializing_if = "Option::is_none")]
271 pub language_code: Option<String>,
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub depth: Option<i32>,
275 #[serde(skip_serializing_if = "Option::is_none")]
277 pub priority: Option<i32>,
278 #[serde(skip_serializing_if = "Option::is_none")]
280 pub tag: Option<String>,
281 #[serde(skip_serializing_if = "Option::is_none")]
283 pub postback_url: Option<String>,
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub postback_data: Option<String>,
287 #[serde(skip_serializing_if = "Option::is_none")]
289 pub pingback_url: Option<String>,
290}
291
292impl AppDataApiAppReviewsTaskPostRequest {
293 pub fn new(app_id: String, location_code: i32, language_code: String) -> Self {
295 AppDataApiAppReviewsTaskPostRequest {
296 app_id,
297 location_code: Some(location_code),
298 language_code: Some(language_code),
299 ..AppDataApiAppReviewsTaskPostRequest::default()
300 }
301 }
302}