data_for_seo/api/dataforseo_labs/
apple.rs1use crate::entity::{
5 DataForSeoLabsAppCompetitorItem, DataForSeoLabsAppIntersectionItem,
6 DataForSeoLabsAppKeywordItem, DataForSeoLabsBulkAppMetricsItem, DataForSeoLabsResult,
7};
8use crate::{DataForSeoApiResponse, DataForSeoClient};
9use serde::{Deserialize, Serialize};
10use serde_json::Value;
11use std::collections::HashMap;
12
13pub struct DataForSeoLabsApiApple<'a> {
15 pub(crate) client: &'a DataForSeoClient,
16}
17
18impl DataForSeoLabsApiApple<'_> {
19 pub async fn keywords_for_app(
22 &self,
23 data: Vec<DataForSeoLabsAppleKeywordsForAppRequest>,
24 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppKeywordItem>> {
25 self.client
26 .http_post("/v3/dataforseo_labs/apple/keywords_for_app/live", &data)
27 .await
28 }
29
30 pub async fn app_competitors(
33 &self,
34 data: Vec<DataForSeoLabsAppleAppCompetitorsRequest>,
35 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppCompetitorItem>> {
36 self.client
37 .http_post("/v3/dataforseo_labs/apple/app_competitors/live", &data)
38 .await
39 }
40
41 pub async fn app_intersection(
44 &self,
45 data: Vec<DataForSeoLabsAppleAppIntersectionRequest>,
46 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAppIntersectionItem>> {
47 self.client
48 .http_post("/v3/dataforseo_labs/apple/app_intersection/live", &data)
49 .await
50 }
51
52 pub async fn bulk_app_metrics(
55 &self,
56 data: Vec<DataForSeoLabsAppleBulkAppMetricsRequest>,
57 ) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsBulkAppMetricsItem>> {
58 self.client
59 .http_post("/v3/dataforseo_labs/apple/bulk_app_metrics/live", &data)
60 .await
61 }
62}
63
64#[derive(Debug, Default, Serialize, Deserialize, Clone)]
67pub struct DataForSeoLabsAppleKeywordsForAppRequest {
68 pub app_id: String,
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub location_name: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub location_code: Option<i32>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub language_name: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub language_code: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub filters: Option<Vec<Value>>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub order_by: Option<Vec<String>>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub limit: Option<i32>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub offset: Option<i32>,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub tag: Option<String>,
97}
98
99impl DataForSeoLabsAppleKeywordsForAppRequest {
100 pub fn new(app_id: &str) -> DataForSeoLabsAppleKeywordsForAppRequest {
102 DataForSeoLabsAppleKeywordsForAppRequest {
103 app_id: app_id.to_string(),
104 ..Default::default()
105 }
106 }
107}
108
109#[derive(Debug, Default, Serialize, Deserialize, Clone)]
112pub struct DataForSeoLabsAppleAppCompetitorsRequest {
113 pub app_id: String,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub location_name: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub location_code: Option<i32>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub language_name: Option<String>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub language_code: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub filters: Option<Vec<Value>>,
130 #[serde(skip_serializing_if = "Option::is_none")]
132 pub order_by: Option<Vec<String>>,
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub limit: Option<i32>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub offset: Option<i32>,
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub tag: Option<String>,
142}
143
144impl DataForSeoLabsAppleAppCompetitorsRequest {
145 pub fn new(app_id: &str) -> DataForSeoLabsAppleAppCompetitorsRequest {
147 DataForSeoLabsAppleAppCompetitorsRequest {
148 app_id: app_id.to_string(),
149 ..Default::default()
150 }
151 }
152}
153
154#[derive(Debug, Default, Serialize, Deserialize, Clone)]
157pub struct DataForSeoLabsAppleAppIntersectionRequest {
158 pub app_ids: HashMap<String, String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub location_name: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub location_code: Option<i32>,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub language_name: Option<String>,
169 #[serde(skip_serializing_if = "Option::is_none")]
171 pub language_code: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub filters: Option<Vec<Value>>,
175 #[serde(skip_serializing_if = "Option::is_none")]
177 pub order_by: Option<Vec<String>>,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 pub limit: Option<i32>,
181 #[serde(skip_serializing_if = "Option::is_none")]
183 pub offset: Option<i32>,
184 #[serde(skip_serializing_if = "Option::is_none")]
186 pub tag: Option<String>,
187}
188
189impl DataForSeoLabsAppleAppIntersectionRequest {
190 pub fn new(app_ids: HashMap<String, String>) -> DataForSeoLabsAppleAppIntersectionRequest {
192 DataForSeoLabsAppleAppIntersectionRequest {
193 app_ids,
194 ..Default::default()
195 }
196 }
197}
198
199#[derive(Debug, Default, Serialize, Deserialize, Clone)]
202pub struct DataForSeoLabsAppleBulkAppMetricsRequest {
203 pub app_ids: Vec<String>,
205 #[serde(skip_serializing_if = "Option::is_none")]
207 pub location_name: Option<String>,
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub location_code: Option<i32>,
211 #[serde(skip_serializing_if = "Option::is_none")]
213 pub language_name: Option<String>,
214 #[serde(skip_serializing_if = "Option::is_none")]
216 pub language_code: Option<String>,
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pub tag: Option<String>,
220}
221
222impl DataForSeoLabsAppleBulkAppMetricsRequest {
223 pub fn new(app_ids: Vec<String>) -> DataForSeoLabsAppleBulkAppMetricsRequest {
225 DataForSeoLabsAppleBulkAppMetricsRequest {
226 app_ids,
227 ..Default::default()
228 }
229 }
230}