use crate::api::domain_analytics::DomainAnalyticsApi;
use crate::entity::{
DomainAnalyticsApiAggregationTechnologies, DomainAnalyticsApiAvailableTechnologies,
DomainAnalyticsApiDomainTechnologyItem, DomainAnalyticsApiDomainsByHtmlTerms,
DomainAnalyticsApiDomainsByTechnology, DomainAnalyticsApiTechnologiesSummary,
DomainAnalyticsApiTechnologyStats,
};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl DomainAnalyticsApi<'_> {
pub fn technologies(&self) -> DomainAnalyticsApiTechnologies<'_> {
DomainAnalyticsApiTechnologies {
client: self.client,
}
}
}
pub struct DomainAnalyticsApiTechnologies<'a> {
client: &'a DataForSeoClient,
}
impl DomainAnalyticsApiTechnologies<'_> {
pub async fn available_technologies(
&self,
) -> DataForSeoApiResponse<DomainAnalyticsApiAvailableTechnologies> {
self.client
.http_get("/v3/domain_analytics/technologies/technologies")
.await
}
pub async fn aggregation_technologies(
&self,
data: Vec<DomainAnalyticsApiAggregationTechnologiesPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiAggregationTechnologies> {
self.client
.http_post(
"/v3/domain_analytics/technologies/aggregation_technologies/live",
&data,
)
.await
}
pub async fn technologies_summary(
&self,
data: Vec<DomainAnalyticsApiTechnologiesSummaryPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiTechnologiesSummary> {
self.client
.http_post(
"/v3/domain_analytics/technologies/technologies_summary/live",
&data,
)
.await
}
pub async fn technology_stats(
&self,
data: Vec<DomainAnalyticsApiTechnologyStatsPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiTechnologyStats> {
self.client
.http_post(
"/v3/domain_analytics/technologies/technology_stats/live",
&data,
)
.await
}
pub async fn domains_by_technology(
&self,
data: Vec<DomainAnalyticsApiDomainsByTechnologyPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiDomainsByTechnology> {
self.client
.http_post(
"/v3/domain_analytics/technologies/domains_by_technology/live",
&data,
)
.await
}
pub async fn domains_by_html_terms(
&self,
data: Vec<DomainAnalyticsApiDomainsByHtmlTermsPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiDomainsByHtmlTerms> {
self.client
.http_post(
"/v3/domain_analytics/technologies/domains_by_html_terms/live",
&data,
)
.await
}
pub async fn domain_technologies(
&self,
data: Vec<DomainAnalyticsApiDomainTechnologiesPost>,
) -> DataForSeoApiResponse<DomainAnalyticsApiDomainTechnologyItem> {
self.client
.http_post(
"/v3/domain_analytics/technologies/domain_technologies/live",
&data,
)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiTechnologyPath {
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
impl DomainAnalyticsApiTechnologyPath {
pub fn new(path: String) -> DomainAnalyticsApiTechnologyPath {
DomainAnalyticsApiTechnologyPath {
path,
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiAggregationTechnologiesPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub group: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub technology: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keyword: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_groups_list_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_categories_list_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_technologies_list_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_list_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiAggregationTechnologiesPost {
pub fn new() -> DomainAnalyticsApiAggregationTechnologiesPost {
DomainAnalyticsApiAggregationTechnologiesPost::default()
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiTechnologiesSummaryPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub technology_paths: Option<Vec<DomainAnalyticsApiTechnologyPath>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub groups: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub categories: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub technologies: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keywords: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_list_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiTechnologiesSummaryPost {
pub fn new() -> DomainAnalyticsApiTechnologiesSummaryPost {
DomainAnalyticsApiTechnologiesSummaryPost::default()
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiTechnologyStatsPost {
pub technology: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiTechnologyStatsPost {
pub fn new(technology: String) -> DomainAnalyticsApiTechnologyStatsPost {
DomainAnalyticsApiTechnologyStatsPost {
technology,
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiDomainsByTechnologyPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub technologies: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub technology_paths: Option<Vec<DomainAnalyticsApiTechnologyPath>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub groups: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub categories: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keywords: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiDomainsByTechnologyPost {
pub fn new(technologies: Vec<String>) -> DomainAnalyticsApiDomainsByTechnologyPost {
DomainAnalyticsApiDomainsByTechnologyPost {
technologies: Some(technologies),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiDomainsByHtmlTermsPost {
pub search_terms: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keywords: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiDomainsByHtmlTermsPost {
pub fn new(search_terms: Vec<String>) -> DomainAnalyticsApiDomainsByHtmlTermsPost {
DomainAnalyticsApiDomainsByHtmlTermsPost {
search_terms,
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DomainAnalyticsApiDomainTechnologiesPost {
pub target: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DomainAnalyticsApiDomainTechnologiesPost {
pub fn new(target: String) -> DomainAnalyticsApiDomainTechnologiesPost {
DomainAnalyticsApiDomainTechnologiesPost {
target,
..Default::default()
}
}
}