use crate::entity::{SerpApiElementAiOverview, SerpApiElementAnswerBox, SerpApiElementCarousel, SerpApiElementFeaturedSnippet, SerpApiElementHotelsPack, SerpApiElementKnowledgeGraph, SerpApiElementLocalPack, SerpApiElementMultiCarousel, SerpApiElementOrganic, SerpApiElementPaid, SerpApiElementPeopleAlsoSearch, SerpApiElementRefinementChips, SerpApiElementRelatedSearches, SerpApiGoogleOrganicTaskSpell};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiGoogleOrganicTaskRegular {
pub keyword: String,
#[serde(rename = "type")]
pub search_engine_type: Option<String>,
pub se_domain: Option<String>,
pub location_code: i32,
pub language_code: Option<String>,
pub check_url: Option<String>,
pub datetime: Option<String>,
pub spell: Option<SerpApiGoogleOrganicTaskSpell>,
pub refinement_chips: Option<SerpApiElementRefinementChips>,
pub item_types: Option<Vec<String>>,
pub se_results_count: Option<i32>,
pub items_count: Option<i32>,
pub items: Option<Vec<SerpApiGoogleOrganicItem>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiGoogleOrganicTaskAdvanced {
pub keyword: String,
#[serde(rename = "type")]
pub search_engine_type: Option<String>,
pub se_domain: Option<String>,
pub location_code: i32,
pub language_code: Option<String>,
pub check_url: Option<String>,
pub datetime: Option<String>,
pub spell: Option<SerpApiGoogleOrganicTaskSpell>,
pub refinement_chips: Option<SerpApiElementRefinementChips>,
pub item_types: Option<Vec<String>>,
pub se_results_count: Option<i32>,
pub items_count: Option<i32>,
pub items: Option<Vec<SerpApiGoogleOrganicItem>>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "type")]
pub enum SerpApiGoogleOrganicItem {
#[serde(rename="answer_box")]
AnswerBox(SerpApiElementAnswerBox),
#[serde(rename="carousel")]
Carousel(SerpApiElementCarousel),
#[serde(rename="multi_carousel")]
MultiCarousel(SerpApiElementMultiCarousel),
#[serde(rename="featured_snippet")]
FeaturedSnippet(SerpApiElementFeaturedSnippet),
#[serde(rename="knowledge_graph")]
KnowledgeGraph(SerpApiElementKnowledgeGraph),
#[serde(rename="local_pack")]
LocalPack(SerpApiElementLocalPack),
#[serde(rename="hotels_pack")]
HotelsPack(SerpApiElementHotelsPack),
#[serde(rename="organic")]
Organic(SerpApiElementOrganic),
#[serde(rename="paid")]
Paid(SerpApiElementPaid),
#[serde(rename="related_searches")]
RelatedSearches(SerpApiElementRelatedSearches),
#[serde(rename="people_also_search")]
PeopleAlsoSearch(SerpApiElementPeopleAlsoSearch),
#[serde(rename="ai_overview")]
AiOverview(SerpApiElementAiOverview),
#[serde(untagged)]
Unknown(Value),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SerpApiGoogleOrganicItemPaidExtra {
ad_aclk: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SerpApiElementHotelsPackElementPrice {
pub current: Option<f32>,
pub regular: Option<f32>,
pub max_value: Option<f32>,
pub currency: Option<String>,
pub is_price_range: Option<bool>,
pub displayed_price: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SerpApiElementTopStoriesElement {
#[serde(rename = "type")]
pub type_of_element: Option<String>,
pub source: Option<String>,
pub domain: Option<String>,
pub title: Option<String>,
pub date: Option<String>,
pub amp_version: Option<bool>,
pub timestamp: Option<String>,
pub url: Option<String>,
pub image_url: Option<String>,
pub badges: Option<Vec<String>>,
}