use crate::entity::{
DataForSeoLabsKeywordData, DataForSeoLabsKeywordInfo, DataForSeoLabsMetrics,
DataForSeoLabsMetricsInfo, DataForSeoLabsRankedSerpElement, DataForSeoLabsSerpItem,
};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsRankedKeywordItem {
pub se_type: Option<String>,
pub ranked_serp_element: Option<DataForSeoLabsRankedSerpElement>,
pub keyword_data: Option<DataForSeoLabsKeywordData>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsRelatedKeywordItem {
pub se_type: Option<String>,
pub keyword_data: Option<DataForSeoLabsKeywordData>,
pub depth: Option<i64>,
pub related_keywords: Option<Vec<String>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsSearchIntentItem {
pub se_type: Option<String>,
pub keyword: Option<String>,
pub keyword_intent: Option<DataForSeoLabsKeywordIntent>,
pub secondary_keyword_intents: Option<Vec<DataForSeoLabsKeywordIntent>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsKeywordIntent {
pub label: Option<String>,
pub probability: Option<f64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsKeywordDifficultyItem {
pub se_type: Option<String>,
pub keyword: Option<String>,
pub keyword_difficulty: Option<i64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalKeywordDataItem {
pub se_type: Option<String>,
pub keyword: Option<String>,
pub location_code: Option<i32>,
pub language_code: Option<String>,
pub history: Option<Vec<DataForSeoLabsKeywordHistory>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsKeywordHistory {
pub year: Option<i64>,
pub month: Option<i64>,
pub keyword_info: Option<DataForSeoLabsKeywordInfo>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsCompetitorItem {
pub se_type: Option<String>,
pub domain: Option<String>,
pub avg_position: Option<f64>,
pub sum_position: Option<i64>,
pub intersections: Option<i64>,
pub full_domain_metrics: Option<DataForSeoLabsMetrics>,
pub metrics: Option<DataForSeoLabsMetrics>,
pub competitor_metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsSerpCompetitorItem {
pub se_type: Option<String>,
pub domain: Option<String>,
pub avg_position: Option<f64>,
pub median_position: Option<f64>,
pub rating: Option<i64>,
pub etv: Option<f64>,
pub keywords_count: Option<i64>,
pub visibility: Option<f64>,
pub relevant_serp_items: Option<i64>,
pub keywords_positions: Option<HashMap<String, Vec<i64>>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsDomainMetricsItem {
pub se_type: Option<String>,
pub location_code: Option<i32>,
pub language_code: Option<String>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsTrafficEstimationItem {
pub se_type: Option<String>,
pub target: Option<String>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsSubdomainItem {
pub se_type: Option<String>,
pub subdomain: Option<String>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsRelevantPageItem {
pub se_type: Option<String>,
pub page_address: Option<String>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsDomainIntersectionItem {
pub se_type: Option<String>,
pub keyword_data: Option<DataForSeoLabsKeywordData>,
pub first_domain_serp_element: Option<DataForSeoLabsSerpItem>,
pub second_domain_serp_element: Option<DataForSeoLabsSerpItem>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsPageIntersectionItem {
pub se_type: Option<String>,
pub keyword_data: Option<DataForSeoLabsKeywordData>,
pub intersection_result: Option<HashMap<String, DataForSeoLabsSerpItem>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalRankOverviewItem {
pub se_type: Option<String>,
pub year: Option<i64>,
pub month: Option<i64>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalSerpItem {
pub se_type: Option<String>,
pub keyword: Option<String>,
#[serde(rename = "type")]
pub item_type: Option<String>,
pub se_domain: Option<String>,
pub location_code: Option<i32>,
pub language_code: Option<String>,
pub check_url: Option<String>,
pub datetime: Option<String>,
pub spell: Option<Value>,
pub item_types: Option<Vec<String>>,
pub se_results_count: Option<i64>,
pub items_count: Option<i64>,
pub items: Option<Vec<DataForSeoLabsSerpItem>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsCategoryMetricsItem {
pub se_type: Option<String>,
pub categories: Option<Vec<i64>>,
pub metrics: Option<DataForSeoLabsMetrics>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalMetricsInfo {
pub year: Option<i64>,
pub month: Option<i64>,
pub etv: Option<f64>,
pub count: Option<i64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalMetricsBundle {
pub organic: Option<Vec<DataForSeoLabsHistoricalMetricsInfo>>,
pub paid: Option<Vec<DataForSeoLabsHistoricalMetricsInfo>>,
pub local_pack: Option<Vec<DataForSeoLabsHistoricalMetricsInfo>>,
pub featured_snippet: Option<Vec<DataForSeoLabsHistoricalMetricsInfo>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsHistoricalTrafficEstimationItem {
pub se_type: Option<String>,
pub target: Option<String>,
pub metrics: Option<DataForSeoLabsHistoricalMetricsBundle>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsCategoriesForKeywordsItem {
pub keyword: Option<String>,
pub categories: Option<Vec<i64>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsDomainMetricsByCategoriesItem {
pub se_type: Option<String>,
pub top_categories: Option<Vec<i64>>,
pub organic_etv: Option<f64>,
pub organic_count: Option<i64>,
pub organic_is_lost: Option<i64>,
pub organic_is_new: Option<i64>,
pub domain: Option<String>,
pub main_domain: Option<String>,
pub metrics_history: Option<HashMap<String, HashMap<String, DataForSeoLabsMetricsInfo>>>,
pub metrics_difference: Option<HashMap<String, DataForSeoLabsMetricsInfo>>,
}