use crate::entity::AiOptimizationMonthlySearch;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationMentionMetric {
pub key: Option<String>,
pub mentions: Option<i64>,
pub ai_search_volume: Option<f64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationMentionTotal {
pub mentions: Option<i64>,
pub ai_search_volume: Option<f64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationAggregatedMetrics {
pub location: Option<Vec<AiOptimizationMentionMetric>>,
pub language: Option<Vec<AiOptimizationMentionMetric>>,
pub platform: Option<Vec<AiOptimizationMentionMetric>>,
pub sources_domain: Option<Vec<AiOptimizationMentionMetric>>,
pub search_results_domain: Option<Vec<AiOptimizationMentionMetric>>,
pub brand_entities_title: Option<Vec<AiOptimizationMentionMetric>>,
pub brand_entities_category: Option<Vec<AiOptimizationMentionMetric>>,
pub total: Option<AiOptimizationMentionTotal>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationMentionSource {
pub snippet: Option<String>,
pub source_name: Option<String>,
pub thumbnail: Option<String>,
pub markdown: Option<String>,
pub position: Option<i64>,
pub title: Option<String>,
pub domain: Option<String>,
pub url: Option<String>,
pub publication_date: Option<String>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationLlmMention {
pub platform: Option<String>,
pub model_name: Option<String>,
pub location_code: Option<i32>,
pub language_code: Option<String>,
pub question: Option<String>,
pub answer: Option<String>,
pub sources: Option<Vec<AiOptimizationMentionSource>>,
pub search_results: Option<Value>,
pub ai_search_volume: Option<f64>,
pub monthly_searches: Option<Vec<AiOptimizationMonthlySearch>>,
pub first_response_at: Option<String>,
pub last_response_at: Option<String>,
pub brand_entities: Option<Value>,
pub fan_out_queries: Option<Value>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationLlmMentionsSearch {
pub total_count: Option<i64>,
pub current_offset: Option<i32>,
pub search_after_token: Option<String>,
pub items_count: Option<i64>,
pub items: Option<Vec<AiOptimizationLlmMention>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationMentionItem {
pub key: Option<String>,
pub domain: Option<String>,
pub page: Option<String>,
pub brand: Option<String>,
pub brand_category: Option<String>,
pub location: Option<Vec<AiOptimizationMentionMetric>>,
pub language: Option<Vec<AiOptimizationMentionMetric>>,
pub platform: Option<Vec<AiOptimizationMentionMetric>>,
pub sources_domain: Option<Vec<AiOptimizationMentionMetric>>,
pub search_results_domain: Option<Vec<AiOptimizationMentionMetric>>,
pub brand_entities_title: Option<Vec<AiOptimizationMentionMetric>>,
pub brand_entities_category: Option<Vec<AiOptimizationMentionMetric>>,
pub total: Option<AiOptimizationMentionTotal>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationLlmMentionsMetrics {
pub total_count: Option<i64>,
pub offset: Option<i32>,
pub current_offset: Option<i32>,
pub items_count: Option<i64>,
pub aggregated_metrics: Option<AiOptimizationAggregatedMetrics>,
pub items: Option<Vec<AiOptimizationMentionItem>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationMentionTimeseriesItem {
pub date: Option<String>,
pub year: Option<i32>,
pub month: Option<i32>,
pub mentions: Option<i64>,
pub ai_search_volume: Option<f64>,
pub new_mentions: Option<i64>,
pub lost_mentions: Option<i64>,
pub new_ai_search_volume: Option<f64>,
pub lost_ai_search_volume: Option<f64>,
pub delta_mentions: Option<i64>,
pub delta_ai_search_volume: Option<f64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationLlmMentionsTimeseries {
pub items_count: Option<i64>,
pub items: Option<Vec<AiOptimizationMentionTimeseriesItem>>,
pub date_from: Option<String>,
pub date_to: Option<String>,
pub group_range: Option<String>,
}