data_for_seo/api/domain_analytics/
technologies.rs1use crate::api::domain_analytics::DomainAnalyticsApi;
2use crate::entity::{
3 DomainAnalyticsApiAggregationTechnologies, DomainAnalyticsApiAvailableTechnologies,
4 DomainAnalyticsApiDomainTechnologyItem, DomainAnalyticsApiDomainsByHtmlTerms,
5 DomainAnalyticsApiDomainsByTechnology, DomainAnalyticsApiTechnologiesSummary,
6 DomainAnalyticsApiTechnologyStats,
7};
8use crate::{DataForSeoApiResponse, DataForSeoClient};
9use serde::{Deserialize, Serialize};
10use serde_json::Value;
11
12impl DomainAnalyticsApi<'_> {
13 pub fn technologies(&self) -> DomainAnalyticsApiTechnologies<'_> {
15 DomainAnalyticsApiTechnologies {
16 client: self.client,
17 }
18 }
19}
20
21pub struct DomainAnalyticsApiTechnologies<'a> {
23 client: &'a DataForSeoClient,
24}
25
26impl DomainAnalyticsApiTechnologies<'_> {
27 pub async fn available_technologies(
30 &self,
31 ) -> DataForSeoApiResponse<DomainAnalyticsApiAvailableTechnologies> {
32 self.client
33 .http_get("/v3/domain_analytics/technologies/technologies")
34 .await
35 }
36
37 pub async fn aggregation_technologies(
40 &self,
41 data: Vec<DomainAnalyticsApiAggregationTechnologiesPost>,
42 ) -> DataForSeoApiResponse<DomainAnalyticsApiAggregationTechnologies> {
43 self.client
44 .http_post(
45 "/v3/domain_analytics/technologies/aggregation_technologies/live",
46 &data,
47 )
48 .await
49 }
50
51 pub async fn technologies_summary(
54 &self,
55 data: Vec<DomainAnalyticsApiTechnologiesSummaryPost>,
56 ) -> DataForSeoApiResponse<DomainAnalyticsApiTechnologiesSummary> {
57 self.client
58 .http_post(
59 "/v3/domain_analytics/technologies/technologies_summary/live",
60 &data,
61 )
62 .await
63 }
64
65 pub async fn technology_stats(
68 &self,
69 data: Vec<DomainAnalyticsApiTechnologyStatsPost>,
70 ) -> DataForSeoApiResponse<DomainAnalyticsApiTechnologyStats> {
71 self.client
72 .http_post(
73 "/v3/domain_analytics/technologies/technology_stats/live",
74 &data,
75 )
76 .await
77 }
78
79 pub async fn domains_by_technology(
82 &self,
83 data: Vec<DomainAnalyticsApiDomainsByTechnologyPost>,
84 ) -> DataForSeoApiResponse<DomainAnalyticsApiDomainsByTechnology> {
85 self.client
86 .http_post(
87 "/v3/domain_analytics/technologies/domains_by_technology/live",
88 &data,
89 )
90 .await
91 }
92
93 pub async fn domains_by_html_terms(
96 &self,
97 data: Vec<DomainAnalyticsApiDomainsByHtmlTermsPost>,
98 ) -> DataForSeoApiResponse<DomainAnalyticsApiDomainsByHtmlTerms> {
99 self.client
100 .http_post(
101 "/v3/domain_analytics/technologies/domains_by_html_terms/live",
102 &data,
103 )
104 .await
105 }
106
107 pub async fn domain_technologies(
110 &self,
111 data: Vec<DomainAnalyticsApiDomainTechnologiesPost>,
112 ) -> DataForSeoApiResponse<DomainAnalyticsApiDomainTechnologyItem> {
113 self.client
114 .http_post(
115 "/v3/domain_analytics/technologies/domain_technologies/live",
116 &data,
117 )
118 .await
119 }
120}
121
122#[derive(Debug, Default, Serialize, Deserialize, Clone)]
124pub struct DomainAnalyticsApiTechnologyPath {
125 pub path: String,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub name: Option<String>,
130}
131
132impl DomainAnalyticsApiTechnologyPath {
133 pub fn new(path: String) -> DomainAnalyticsApiTechnologyPath {
135 DomainAnalyticsApiTechnologyPath {
136 path,
137 ..Default::default()
138 }
139 }
140}
141
142#[derive(Debug, Default, Serialize, Deserialize, Clone)]
146pub struct DomainAnalyticsApiAggregationTechnologiesPost {
147 #[serde(skip_serializing_if = "Option::is_none")]
149 pub group: Option<String>,
150 #[serde(skip_serializing_if = "Option::is_none")]
152 pub category: Option<String>,
153 #[serde(skip_serializing_if = "Option::is_none")]
155 pub technology: Option<String>,
156 #[serde(skip_serializing_if = "Option::is_none")]
158 pub keyword: Option<String>,
159 #[serde(skip_serializing_if = "Option::is_none")]
161 pub mode: Option<String>,
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub filters: Option<Vec<Value>>,
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub order_by: Option<Vec<String>>,
168 #[serde(skip_serializing_if = "Option::is_none")]
170 pub internal_groups_list_limit: Option<i32>,
171 #[serde(skip_serializing_if = "Option::is_none")]
173 pub internal_categories_list_limit: Option<i32>,
174 #[serde(skip_serializing_if = "Option::is_none")]
176 pub internal_technologies_list_limit: Option<i32>,
177 #[serde(skip_serializing_if = "Option::is_none")]
179 pub internal_list_limit: Option<i32>,
180 #[serde(skip_serializing_if = "Option::is_none")]
182 pub limit: Option<i32>,
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub offset: Option<i32>,
186 #[serde(skip_serializing_if = "Option::is_none")]
188 pub tag: Option<String>,
189}
190
191impl DomainAnalyticsApiAggregationTechnologiesPost {
192 pub fn new() -> DomainAnalyticsApiAggregationTechnologiesPost {
194 DomainAnalyticsApiAggregationTechnologiesPost::default()
195 }
196}
197
198#[derive(Debug, Default, Serialize, Deserialize, Clone)]
203pub struct DomainAnalyticsApiTechnologiesSummaryPost {
204 #[serde(skip_serializing_if = "Option::is_none")]
206 pub technology_paths: Option<Vec<DomainAnalyticsApiTechnologyPath>>,
207 #[serde(skip_serializing_if = "Option::is_none")]
209 pub groups: Option<Vec<String>>,
210 #[serde(skip_serializing_if = "Option::is_none")]
212 pub categories: Option<Vec<String>>,
213 #[serde(skip_serializing_if = "Option::is_none")]
215 pub technologies: Option<Vec<String>>,
216 #[serde(skip_serializing_if = "Option::is_none")]
218 pub keywords: Option<Vec<String>>,
219 #[serde(skip_serializing_if = "Option::is_none")]
221 pub mode: Option<String>,
222 #[serde(skip_serializing_if = "Option::is_none")]
224 pub filters: Option<Vec<Value>>,
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pub internal_list_limit: Option<i32>,
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub tag: Option<String>,
231}
232
233impl DomainAnalyticsApiTechnologiesSummaryPost {
234 pub fn new() -> DomainAnalyticsApiTechnologiesSummaryPost {
236 DomainAnalyticsApiTechnologiesSummaryPost::default()
237 }
238}
239
240#[derive(Debug, Default, Serialize, Deserialize, Clone)]
242pub struct DomainAnalyticsApiTechnologyStatsPost {
243 pub technology: String,
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub date_from: Option<String>,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub date_to: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub tag: Option<String>,
254}
255
256impl DomainAnalyticsApiTechnologyStatsPost {
257 pub fn new(technology: String) -> DomainAnalyticsApiTechnologyStatsPost {
259 DomainAnalyticsApiTechnologyStatsPost {
260 technology,
261 ..Default::default()
262 }
263 }
264}
265
266#[derive(Debug, Default, Serialize, Deserialize, Clone)]
271pub struct DomainAnalyticsApiDomainsByTechnologyPost {
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub technologies: Option<Vec<String>>,
275 #[serde(skip_serializing_if = "Option::is_none")]
277 pub technology_paths: Option<Vec<DomainAnalyticsApiTechnologyPath>>,
278 #[serde(skip_serializing_if = "Option::is_none")]
280 pub groups: Option<Vec<String>>,
281 #[serde(skip_serializing_if = "Option::is_none")]
283 pub categories: Option<Vec<String>>,
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub keywords: Option<Vec<String>>,
287 #[serde(skip_serializing_if = "Option::is_none")]
289 pub mode: Option<String>,
290 #[serde(skip_serializing_if = "Option::is_none")]
292 pub filters: Option<Vec<Value>>,
293 #[serde(skip_serializing_if = "Option::is_none")]
295 pub order_by: Option<Vec<String>>,
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub limit: Option<i32>,
299 #[serde(skip_serializing_if = "Option::is_none")]
301 pub offset: Option<i32>,
302 #[serde(skip_serializing_if = "Option::is_none")]
304 pub offset_token: Option<String>,
305 #[serde(skip_serializing_if = "Option::is_none")]
307 pub tag: Option<String>,
308}
309
310impl DomainAnalyticsApiDomainsByTechnologyPost {
311 pub fn new(technologies: Vec<String>) -> DomainAnalyticsApiDomainsByTechnologyPost {
313 DomainAnalyticsApiDomainsByTechnologyPost {
314 technologies: Some(technologies),
315 ..Default::default()
316 }
317 }
318}
319
320#[derive(Debug, Default, Serialize, Deserialize, Clone)]
322pub struct DomainAnalyticsApiDomainsByHtmlTermsPost {
323 pub search_terms: Vec<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
327 pub keywords: Option<Vec<String>>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub mode: Option<String>,
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub filters: Option<Vec<Value>>,
334 #[serde(skip_serializing_if = "Option::is_none")]
336 pub order_by: Option<Vec<String>>,
337 #[serde(skip_serializing_if = "Option::is_none")]
339 pub limit: Option<i32>,
340 #[serde(skip_serializing_if = "Option::is_none")]
342 pub offset: Option<i32>,
343 #[serde(skip_serializing_if = "Option::is_none")]
345 pub offset_token: Option<String>,
346 #[serde(skip_serializing_if = "Option::is_none")]
348 pub tag: Option<String>,
349}
350
351impl DomainAnalyticsApiDomainsByHtmlTermsPost {
352 pub fn new(search_terms: Vec<String>) -> DomainAnalyticsApiDomainsByHtmlTermsPost {
354 DomainAnalyticsApiDomainsByHtmlTermsPost {
355 search_terms,
356 ..Default::default()
357 }
358 }
359}
360
361#[derive(Debug, Default, Serialize, Deserialize, Clone)]
363pub struct DomainAnalyticsApiDomainTechnologiesPost {
364 pub target: String,
366 #[serde(skip_serializing_if = "Option::is_none")]
368 pub tag: Option<String>,
369}
370
371impl DomainAnalyticsApiDomainTechnologiesPost {
372 pub fn new(target: String) -> DomainAnalyticsApiDomainTechnologiesPost {
374 DomainAnalyticsApiDomainTechnologiesPost {
375 target,
376 ..Default::default()
377 }
378 }
379}