#![allow(clippy::all)]
#![allow(
dead_code,
unused_imports,
unused_variables,
non_snake_case,
rustdoc::all
)]
use crate::core::{Client, Error, Method, QueryParams, Result};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Clone)]
pub struct Google {
client: Client,
}
impl Google {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
&self.client
}
pub async fn search_ai_mode(&self, params: SearchAiModeParams) -> Result<AiModeResponse> {
let path = "/api/v1/ai-mode/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_autocomplete(
&self,
params: GetAutocompleteParams,
) -> Result<AutocompleteResponse> {
let path = "/api/v1/autocomplete/".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_finance_quote(
&self,
params: GetFinanceQuoteParams,
) -> Result<FinanceQuoteResponse> {
let path = "/api/v1/finance/quote".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn flights_search(
&self,
params: FlightsSearchParams,
) -> Result<GoogleFlightsResponse> {
let path = "/api/v1/flights/search".to_string();
let mut q = QueryParams::new();
q.opt("departure_id", params.departure_id.as_ref());
q.opt("arrival_id", params.arrival_id.as_ref());
q.opt("outbound_date", params.outbound_date.as_ref());
q.opt("return_date", params.return_date.as_ref());
q.opt("trip_type", params.trip_type.as_ref());
q.opt("adults", params.adults.as_ref());
q.opt("children", params.children.as_ref());
q.opt("infants_in_seat", params.infants_in_seat.as_ref());
q.opt("infants_on_lap", params.infants_on_lap.as_ref());
q.opt("travel_class", params.travel_class.as_ref());
q.opt("currency", params.currency.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("stops", params.stops.as_ref());
q.opt("max_price", params.max_price.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn hotel_details(&self, params: HotelDetailsParams) -> Result<HotelDetailResponse> {
let path = "/api/v1/hotels/details".to_string();
let mut q = QueryParams::new();
q.opt("property_token", params.property_token.as_ref());
q.opt("check_in", params.check_in.as_ref());
q.opt("check_out", params.check_out.as_ref());
q.opt("adults", params.adults.as_ref());
q.opt("currency", params.currency.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn hotels_search(&self, params: HotelsSearchParams) -> Result<HotelsSearchResponse> {
let path = "/api/v1/hotels/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("check_in", params.check_in.as_ref());
q.opt("check_out", params.check_out.as_ref());
q.opt("adults", params.adults.as_ref());
q.opt("children", params.children.as_ref());
q.opt("currency", params.currency.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("sort_by", params.sort_by.as_ref());
q.opt("min_price", params.min_price.as_ref());
q.opt("max_price", params.max_price.as_ref());
q.opt("hotel_class", params.hotel_class.as_ref());
q.opt("next_page_token", params.next_page_token.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_images(&self, params: SearchImagesParams) -> Result<ImagesSearchResponse> {
let path = "/api/v1/images/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("tbs", params.tbs.as_ref());
q.opt("imgsz", params.imgsz.as_ref());
q.opt("imgcolor", params.imgcolor.as_ref());
q.opt("imgtype", params.imgtype.as_ref());
q.opt("safe", params.safe.as_ref());
q.opt("page", params.page.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn jobs_search(&self, params: JobsSearchParams) -> Result<JobsSearchResponse> {
let path = "/api/v1/jobs/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("location", params.location.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("country", params.country.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("language", params.language.as_ref());
q.opt("domain", params.domain.as_ref());
q.opt("job_type", params.job_type.as_ref());
q.opt("date_posted", params.date_posted.as_ref());
q.opt("ltype", params.ltype.as_ref());
q.opt("chips", params.chips.as_ref());
q.opt("uds", params.uds.as_ref());
q.opt("uule", params.uule.as_ref());
q.opt("lrad", params.lrad.as_ref());
q.opt("next_page_token", params.next_page_token.as_ref());
q.opt("mode", params.mode.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_lens(&self, params: SearchLensParams) -> Result<LensSearchResponse> {
let path = "/api/v1/lens/search".to_string();
let mut q = QueryParams::new();
q.opt("url", params.url.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn local_search(&self, params: LocalSearchParams) -> Result<GoogleLocalResponse> {
let path = "/api/v1/local/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("domain", params.domain.as_ref());
q.opt("location", params.location.as_ref());
q.opt("uule", params.uule.as_ref());
q.opt("num", params.num.as_ref());
q.opt("start", params.start.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn maps_photos(&self, params: MapsPhotosParams) -> Result<MapsPhotosResponse> {
let path = "/api/v1/maps/photos".to_string();
let mut q = QueryParams::new();
q.opt("data_id", params.data_id.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn maps_place(&self, params: MapsPlaceParams) -> Result<MapsPlaceResponse> {
let path = "/api/v1/maps/place".to_string();
let mut q = QueryParams::new();
q.opt("place_id", params.place_id.as_ref());
q.opt("data_id", params.data_id.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn maps_posts(&self, params: MapsPostsParams) -> Result<MapsPostsResponse> {
let path = "/api/v1/maps/posts".to_string();
let mut q = QueryParams::new();
q.opt("data_id", params.data_id.as_ref());
q.opt("place_id", params.place_id.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn maps_reviews(&self, params: MapsReviewsParams) -> Result<MapsReviewsResponse> {
let path = "/api/v1/maps/reviews".to_string();
let mut q = QueryParams::new();
q.opt("data_id", params.data_id.as_ref());
q.opt("sort_by", params.sort_by.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("next_page_token", params.next_page_token.as_ref());
q.opt("offset", params.offset.as_ref());
q.opt("results", params.results.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn maps_search(&self, params: MapsSearchParams) -> Result<MapsSearchResponse> {
let path = "/api/v1/maps/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("ll", params.ll.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("start", params.start.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_news(&self, params: SearchNewsParams) -> Result<NewsSearchResponse> {
let path = "/api/v1/news/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("max_results", params.max_results.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn news_by_topic(&self, params: NewsByTopicParams) -> Result<NewsTopicsResponse> {
let path = "/api/v1/news/topics".to_string();
let mut q = QueryParams::new();
q.opt("topic", params.topic.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("max_results", params.max_results.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trending_news(&self, params: TrendingNewsParams) -> Result<NewsTrendingResponse> {
let path = "/api/v1/news/trending".to_string();
let mut q = QueryParams::new();
q.opt("hl", params.hl.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("max_results", params.max_results.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_patent_detail(
&self,
params: GetPatentDetailParams,
) -> Result<PatentDetailResponse> {
let path = "/api/v1/patents/detail".to_string();
let mut q = QueryParams::new();
q.opt("patent_id", params.patent_id.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_patents(
&self,
params: SearchPatentsParams,
) -> Result<PatentSearchResponse> {
let path = "/api/v1/patents/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("page", params.page.as_ref());
q.opt("num", params.num.as_ref());
q.opt("sort", params.sort.as_ref());
q.opt("inventor", params.inventor.as_ref());
q.opt("assignee", params.assignee.as_ref());
q.opt("country", params.country.as_ref());
q.opt("language", params.language.as_ref());
q.opt("status", params.status.as_ref());
q.opt("patent_type", params.patent_type.as_ref());
q.opt("before", params.before.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_product_detail(
&self,
params: GetProductDetailParams,
) -> Result<ProductDetailResponse> {
let path = "/api/v1/products/detail".to_string();
let mut q = QueryParams::new();
q.opt("product_id", params.product_id.as_ref());
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("domain", params.domain.as_ref());
q.opt("include_offers", params.include_offers.as_ref());
q.opt("include_variants", params.include_variants.as_ref());
q.opt("resolve_deep_urls", params.resolve_deep_urls.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn scholar_author(
&self,
params: ScholarAuthorParams,
) -> Result<ScholarAuthorResponse> {
let path = "/api/v1/scholar/author".to_string();
let mut q = QueryParams::new();
q.opt("author_id", params.author_id.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("cstart", params.cstart.as_ref());
q.opt("pagesize", params.pagesize.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn scholar_author_citation(
&self,
params: ScholarAuthorCitationParams,
) -> Result<ScholarAuthorCitationResponse> {
let path = "/api/v1/scholar/author/citation".to_string();
let mut q = QueryParams::new();
q.opt("author_id", params.author_id.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn scholar_cite(&self, params: ScholarCiteParams) -> Result<ScholarCiteResponse> {
let path = "/api/v1/scholar/cite".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn scholar_profiles(
&self,
params: ScholarProfilesParams,
) -> Result<ScholarProfilesResponse> {
let path = "/api/v1/scholar/profiles".to_string();
let mut q = QueryParams::new();
q.opt("mauthors", params.mauthors.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("after_author", params.after_author.as_ref());
q.opt("before_author", params.before_author.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_scholar(
&self,
params: SearchScholarParams,
) -> Result<ScholarSearchResponse> {
let path = "/api/v1/scholar/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("as_ylo", params.as_ylo.as_ref());
q.opt("as_yhi", params.as_yhi.as_ref());
q.opt("as_sdt", params.as_sdt.as_ref());
q.opt("page", params.page.as_ref());
q.opt("num", params.num.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search(&self, params: SearchParams) -> Result<GoogleSearchResponse> {
let path = "/api/v1/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("num", params.num.as_ref());
q.opt("start", params.start.as_ref());
q.opt("domain", params.domain.as_ref());
q.opt("device", params.device.as_ref());
q.opt("location", params.location.as_ref());
q.opt("lr", params.lr.as_ref());
q.opt("tbs", params.tbs.as_ref());
q.opt("safe", params.safe.as_ref());
q.opt("uule", params.uule.as_ref());
q.opt("filter", params.filter.as_ref());
q.opt("nfpr", params.nfpr.as_ref());
q.opt("cr", params.cr.as_ref());
q.opt("ludocid", params.ludocid.as_ref());
q.opt("lsig", params.lsig.as_ref());
q.opt("kgmid", params.kgmid.as_ref());
q.opt("si", params.si.as_ref());
q.opt("ibp", params.ibp.as_ref());
q.opt("uds", params.uds.as_ref());
q.opt("ai_overview", params.ai_overview.as_ref());
q.opt("mode", params.mode.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn shopping_product(
&self,
params: ShoppingProductParams,
) -> Result<ShoppingProductResponse> {
let path = "/api/v1/shopping/product".to_string();
let mut q = QueryParams::new();
q.opt("product_id", params.product_id.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn shopping_product_click(
&self,
params: ShoppingProductClickParams,
) -> Result<ShoppingClickResponse> {
let path = "/api/v1/shopping/product/click".to_string();
let mut q = QueryParams::new();
q.opt("title", params.title.as_ref());
q.opt("source", params.source.as_ref());
q.opt("q", params.q.as_ref());
q.opt("product_id", params.product_id.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn shopping_search(
&self,
params: ShoppingSearchParams,
) -> Result<ShoppingSearchResponse> {
let path = "/api/v1/shopping/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("min_price", params.min_price.as_ref());
q.opt("max_price", params.max_price.as_ref());
q.opt("sort_by", params.sort_by.as_ref());
q.opt("free_shipping", params.free_shipping.as_ref());
q.opt("on_sale", params.on_sale.as_ref());
q.opt("start", params.start.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn shorts_search(&self, params: ShortsSearchParams) -> Result<GoogleShortsResponse> {
let path = "/api/v1/shorts/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("domain", params.domain.as_ref());
q.opt("num", params.num.as_ref());
q.opt("start", params.start.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_autocomplete(
&self,
params: TrendsAutocompleteParams,
) -> Result<TrendsAutocompleteResponse> {
let path = "/api/v1/trends/autocomplete".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("tz", params.tz.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_interest(
&self,
params: TrendsInterestParams,
) -> Result<TrendsInterestResponse> {
let path = "/api/v1/trends/interest".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("geo", params.geo.as_ref());
q.opt("date", params.date.as_ref());
q.opt("category", params.category.as_ref());
q.opt("gprop", params.gprop.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_regions(
&self,
params: TrendsRegionsParams,
) -> Result<TrendsRegionsResponse> {
let path = "/api/v1/trends/regions".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("geo", params.geo.as_ref());
q.opt("date", params.date.as_ref());
q.opt("resolution", params.resolution.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_related(
&self,
params: TrendsRelatedParams,
) -> Result<TrendsRelatedResponse> {
let path = "/api/v1/trends/related".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("geo", params.geo.as_ref());
q.opt("date", params.date.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_search(&self, params: TrendsSearchParams) -> Result<TrendsSearchResponse> {
let path = "/api/v1/trends/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("data_type", params.data_type.as_ref());
q.opt("geo", params.geo.as_ref());
q.opt("date", params.date.as_ref());
q.opt("cat", params.cat.as_ref());
q.opt("gprop", params.gprop.as_ref());
q.opt("region", params.region.as_ref());
q.opt("language", params.language.as_ref());
q.opt("tz", params.tz.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_trending(
&self,
params: TrendsTrendingParams,
) -> Result<TrendsTrendingResponse> {
let path = "/api/v1/trends/trending".to_string();
let mut q = QueryParams::new();
q.opt("geo", params.geo.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("hours", params.hours.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn trends_trending_now(
&self,
params: TrendsTrendingNowParams,
) -> Result<TrendsTrendingResponse> {
let path = "/api/v1/trends/trending-now".to_string();
let mut q = QueryParams::new();
q.opt("geo", params.geo.as_ref());
q.opt("hours", params.hours.as_ref());
q.opt("category", params.category.as_ref());
q.opt("status", params.status.as_ref());
q.opt("sort", params.sort.as_ref());
q.opt("hl", params.hl.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_videos(&self, params: SearchVideosParams) -> Result<VideosSearchResponse> {
let path = "/api/v1/videos/search".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("gl", params.gl.as_ref());
q.opt("hl", params.hl.as_ref());
q.opt("tbs", params.tbs.as_ref());
q.opt("safe", params.safe.as_ref());
q.opt("page", params.page.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AdResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub displayed_link: Option<String>,
pub extensions: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiModeResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub references: Vec<AiReference>,
pub text_blocks: Vec<AiTextBlock>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiOverview {
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub deferred: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub page_token: Option<String>,
pub references: Vec<AiOverviewReference>,
pub text_blocks: Vec<AiOverviewTextBlock>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiOverviewListItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
pub snippet_links: Vec<SnippetLink>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiOverviewReference {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub index: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiOverviewTextBlock {
pub list_items: Vec<AiOverviewListItem>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
pub snippet_links: Vec<SnippetLink>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
pub video: Option<AiOverviewVideo>,
pub video_links: Vec<AiOverviewVideo>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiOverviewVideo {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub channel: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub duration: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiReference {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AiTextBlock {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AutocompleteResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub suggestions: Vec<AutocompleteSuggestion>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct AutocompleteSuggestion {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub relevance: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub value: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct CitationByYear {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub citations: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub year: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FinanceQuoteResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub exchange: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price: Option<f64>,
pub price_movement: Option<PriceMovement>,
pub stats: Option<FinanceStats>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub stock: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FinanceStats {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub day_range: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub market_cap: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub pe_ratio: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub prev_close: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub year_range: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FlightAirport {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub city: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub iata_code: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FlightLayover {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub airport: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub airport_name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub duration_minutes: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub overnight: Option<bool>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FlightLeg {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub aircraft: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub airline: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub airline_logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub arrival_airport: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub arrival_airport_name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub arrival_time: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub departure_airport: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub departure_airport_name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub departure_time: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub duration_minutes: Option<i64>,
pub extensions: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub flight_number: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub legroom: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub travel_class: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FlightOffer {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub airline_logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub booking_token: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub carbon_emissions_diff_typical: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub carbon_emissions_grams: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub departure_token: Option<String>,
pub extensions: Vec<String>,
pub layovers: Vec<FlightLayover>,
pub legs: Vec<FlightLeg>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price_type: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_duration_minutes: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FlightPriceInsights {
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub lowest_price: Option<f64>,
pub price_history: Option<Vec<Vec<f64>>>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price_level: Option<String>,
pub typical_price_range: Option<Vec<f64>>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum FlightsSearchStops {
#[serde(rename = "any")]
Any,
#[serde(rename = "nonstop")]
Nonstop,
#[serde(rename = "one_stop")]
OneStop,
#[serde(rename = "two_stops")]
TwoStops,
}
impl std::fmt::Display for FlightsSearchStops {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
FlightsSearchStops::Any => "any",
FlightsSearchStops::Nonstop => "nonstop",
FlightsSearchStops::OneStop => "one_stop",
FlightsSearchStops::TwoStops => "two_stops",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum FlightsSearchTravelClass {
#[serde(rename = "economy")]
Economy,
#[serde(rename = "premium_economy")]
PremiumEconomy,
#[serde(rename = "business")]
Business,
#[serde(rename = "first")]
First,
}
impl std::fmt::Display for FlightsSearchTravelClass {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
FlightsSearchTravelClass::Economy => "economy",
FlightsSearchTravelClass::PremiumEconomy => "premium_economy",
FlightsSearchTravelClass::Business => "business",
FlightsSearchTravelClass::First => "first",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum FlightsSearchTripType {
#[serde(rename = "one_way")]
OneWay,
#[serde(rename = "round_trip")]
RoundTrip,
#[serde(rename = "multi_city")]
MultiCity,
}
impl std::fmt::Display for FlightsSearchTripType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
FlightsSearchTripType::OneWay => "one_way",
FlightsSearchTripType::RoundTrip => "round_trip",
FlightsSearchTripType::MultiCity => "multi_city",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GoogleFlightsResponse {
pub airports: Vec<FlightAirport>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub arrival_id: Option<String>,
pub best_flights: Vec<FlightOffer>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub departure_id: Option<String>,
pub other_flights: Vec<FlightOffer>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub outbound_date: Option<String>,
pub price_insights: Option<FlightPriceInsights>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub return_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub trip_type: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GoogleLocalResponse {
pub local_results: Vec<LocalResult>,
pub search_information: Option<SearchInformation>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GoogleSearchResponse {
pub ads: Vec<AdResult>,
pub ai_overview: Option<AiOverview>,
pub inline_videos: Vec<InlineVideo>,
pub knowledge_graph: Option<KnowledgeGraph>,
pub local_results: Vec<LocalResult>,
pub news_results: Vec<NewsResult>,
pub organic_results: Vec<OrganicResult>,
pub pagination: Option<Pagination>,
pub related_questions: Vec<RelatedQuestion>,
pub related_searches: Vec<RelatedSearch>,
pub search_information: Option<SearchInformation>,
pub shopping_results: Vec<ShoppingResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GoogleShortsResponse {
pub search_information: Option<SearchInformation>,
pub short_videos_results: Vec<ShortVideoResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GpsCoordinates {
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub lat: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub lng: Option<f64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelDetailResponse {
pub property: Option<HotelProperty>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelNearbyPlace {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub duration: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub transport: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelPrice {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub cancellation_policy: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelProperty {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub address: Option<String>,
pub amenities: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub check_in_time: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub check_out_time: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub eco_certified: Option<bool>,
pub gps_coordinates: Option<GpsCoordinates>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub hotel_class: Option<i64>,
pub images: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
pub nearby_places: Vec<HotelNearbyPlace>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub overall_rating: Option<f64>,
pub prices: Vec<HotelPrice>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub property_token: Option<String>,
pub rate_per_night: Option<HotelRate>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
pub total_rate: Option<HotelRate>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelRate {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub extracted: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub lowest: Option<f64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HotelsSearchResponse {
pub pagination: Option<Pagination>,
pub properties: Vec<HotelProperty>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HttpValidationError {
pub detail: Vec<ValidationError>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ImageResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub original: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub original_height: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub original_width: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ImagesSearchResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub results: Vec<ImageResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct InlineSitelink {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct InlineVideo {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub duration: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub platform: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobApplyOption {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobFilter {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
pub options: Vec<JobFilterOption>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobFilterOption {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub label: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub value: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobHighlights {
pub benefits: Vec<String>,
pub qualifications: Vec<String>,
pub responsibilities: Vec<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobResult {
pub apply_links: Vec<String>,
pub apply_options: Vec<JobApplyOption>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub company_name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
pub extensions: Vec<String>,
pub job_highlights: Option<JobHighlights>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub job_type: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub location: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub posted_at: Option<String>,
pub salary: Option<JobSalary>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub schedule_type: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub via: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub work_from_home: Option<bool>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobSalary {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub max: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub min: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub period: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum JobsSearchDatePosted {
#[serde(rename = "today")]
Today,
#[serde(rename = "3days")]
V3days,
#[serde(rename = "week")]
Week,
#[serde(rename = "month")]
Month,
}
impl std::fmt::Display for JobsSearchDatePosted {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
JobsSearchDatePosted::Today => "today",
JobsSearchDatePosted::V3days => "3days",
JobsSearchDatePosted::Week => "week",
JobsSearchDatePosted::Month => "month",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum JobsSearchJobType {
#[serde(rename = "FULLTIME")]
Fulltime,
#[serde(rename = "PARTTIME")]
Parttime,
#[serde(rename = "CONTRACTOR")]
Contractor,
#[serde(rename = "INTERN")]
Intern,
}
impl std::fmt::Display for JobsSearchJobType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
JobsSearchJobType::Fulltime => "FULLTIME",
JobsSearchJobType::Parttime => "PARTTIME",
JobsSearchJobType::Contractor => "CONTRACTOR",
JobsSearchJobType::Intern => "INTERN",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum JobsSearchLtype {
#[serde(rename = "remote")]
Remote,
#[serde(rename = "hybrid")]
Hybrid,
#[serde(rename = "onsite")]
Onsite,
#[serde(rename = "work_from_home")]
WorkFromHome,
}
impl std::fmt::Display for JobsSearchLtype {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
JobsSearchLtype::Remote => "remote",
JobsSearchLtype::Hybrid => "hybrid",
JobsSearchLtype::Onsite => "onsite",
JobsSearchLtype::WorkFromHome => "work_from_home",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum JobsSearchMode {
#[serde(rename = "rpc")]
Rpc,
#[serde(rename = "serp")]
Serp,
}
impl std::fmt::Display for JobsSearchMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
JobsSearchMode::Rpc => "rpc",
JobsSearchMode::Serp => "serp",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct JobsSearchResponse {
pub filters: Vec<JobFilter>,
pub jobs: Vec<JobResult>,
pub jobs_results: Vec<JobResult>,
pub pagination: Option<Pagination>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct KnowledgeGraph {
pub attributes: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct LensResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct LensSearchResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image_url: Option<String>,
pub results: Vec<LensResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct LocalResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub address: Option<String>,
pub gps_coordinates: Option<GpsCoordinates>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub phone: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub place_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsLocationDetails {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsLocationInfo {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub address: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsOwnerResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub text: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPhoto {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPhotoCategory {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPhotosResponse {
pub categories: Vec<MapsPhotoCategory>,
pub pagination: Option<Pagination>,
pub photos: Vec<MapsPhoto>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPlaceDetail {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub address: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub data_cid: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub data_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
pub extensions: HashMap<String, HashMap<String, Value>>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub google_maps_url: Option<String>,
pub gps_coordinates: Option<GpsCoordinates>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub hours: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub open_state: Option<String>,
pub operating_hours: HashMap<String, String>,
pub order_online_urls: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub phone: Option<String>,
pub photos: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub photos_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub place_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub posts_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price_level: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub provider_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub rank: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
pub rating_breakdown: HashMap<String, i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub reviews_link: Option<String>,
pub service_options: Option<MapsServiceOptions>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
pub type_ids: Vec<String>,
pub types: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub website: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPlaceResponse {
pub place: Option<MapsPlaceDetail>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPlaceResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub address: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub data_cid: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub data_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
pub extensions: Vec<HashMap<String, Vec<String>>>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub google_maps_url: Option<String>,
pub gps_coordinates: Option<GpsCoordinates>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub hours: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub open_state: Option<String>,
pub operating_hours: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub phone: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub photos_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub place_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub posts_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price_level: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub rank: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub reviews_link: Option<String>,
pub service_options: Option<MapsServiceOptions>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
pub type_ids: Vec<String>,
pub types: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub website: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPost {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub image: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsPostsResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub has_updates: Option<bool>,
pub location_details: Option<MapsLocationDetails>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub merchant_description: Option<String>,
pub pagination: Option<Pagination>,
pub post_data: Vec<MapsPost>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsReview {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
pub images: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub iso_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub likes: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub rating: Option<i64>,
pub response_from_owner: Option<MapsOwnerResponse>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub text: Option<String>,
pub user: Option<MapsReviewUser>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsReviewTopic {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub keyword: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub mentions: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsReviewUser {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub contributor_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub local_guide: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub photos_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsReviewsResponse {
pub location: Option<MapsLocationInfo>,
pub pagination: Option<Pagination>,
pub reviews: Vec<MapsReview>,
pub topics: Vec<MapsReviewTopic>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum MapsReviewsSortBy {
#[serde(rename = "qualityScore")]
QualityScore,
#[serde(rename = "newestFirst")]
NewestFirst,
#[serde(rename = "ratingHigh")]
RatingHigh,
#[serde(rename = "ratingLow")]
RatingLow,
}
impl std::fmt::Display for MapsReviewsSortBy {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
MapsReviewsSortBy::QualityScore => "qualityScore",
MapsReviewsSortBy::NewestFirst => "newestFirst",
MapsReviewsSortBy::RatingHigh => "ratingHigh",
MapsReviewsSortBy::RatingLow => "ratingLow",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsSearchResponse {
pub pagination: Option<Pagination>,
pub results: Vec<MapsPlaceResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct MapsServiceOptions {
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub curbside_pickup: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub delivery: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub dine_in: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub takeout: Option<bool>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsArticle {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub published_at: Option<String>,
pub related_stories: Vec<NewsRelatedStory>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
pub source: Option<NewsSource>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum NewsByTopicTopic {
#[serde(rename = "WORLD")]
World,
#[serde(rename = "BUSINESS")]
Business,
#[serde(rename = "TECHNOLOGY")]
Technology,
#[serde(rename = "ENTERTAINMENT")]
Entertainment,
#[serde(rename = "SPORTS")]
Sports,
#[serde(rename = "SCIENCE")]
Science,
#[serde(rename = "HEALTH")]
Health,
}
impl std::fmt::Display for NewsByTopicTopic {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
NewsByTopicTopic::World => "WORLD",
NewsByTopicTopic::Business => "BUSINESS",
NewsByTopicTopic::Technology => "TECHNOLOGY",
NewsByTopicTopic::Entertainment => "ENTERTAINMENT",
NewsByTopicTopic::Sports => "SPORTS",
NewsByTopicTopic::Science => "SCIENCE",
NewsByTopicTopic::Health => "HEALTH",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsRelatedStory {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub published_at: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsSearchResponse {
pub articles: Vec<NewsArticle>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsSource {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub icon: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsTopicsResponse {
pub articles: Vec<NewsArticle>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub topic: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct NewsTrendingResponse {
pub articles: Vec<NewsArticle>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct OrganicResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub displayed_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub favicon: Option<String>,
pub highlighted_keywords: Vec<String>,
pub inline_sitelinks: Vec<InlineSitelink>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub page_rank: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub rank: Option<i64>,
pub sitelinks: Vec<Sitelink>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Pagination {
pub current: Option<Value>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub next: Option<String>,
pub page_no: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_pages: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_results: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentCitation {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub assignee: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub filing_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub patent_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentDetail {
#[serde(rename = "abstract")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub abstract_: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub application_number: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub assignee: Option<String>,
pub citations: Vec<PatentCitation>,
pub claims: Vec<String>,
pub classifications: Vec<String>,
pub country_status: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub expiration_date: Option<String>,
pub figures: Vec<PatentFigure>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub filing_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub grant_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub inventor: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub patent_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub pdf_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub priority_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication_number: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentDetailResponse {
pub patent: Option<PatentDetail>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentFigure {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub assignee: Option<String>,
pub country_status: HashMap<String, String>,
pub figures: Vec<PatentFigure>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub filing_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub grant_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub inventor: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub patent_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub pdf_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub priority_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication_date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication_number: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PatentSearchResponse {
pub pagination: Option<Pagination>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub results: Vec<PatentResult>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_results: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PriceMovement {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub direction: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub percentage: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub value: Option<f64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ProductDetailResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub brand: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
pub images: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price_range: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub product_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
pub sellers: Vec<ProductSeller>,
pub specs: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ProductSeller {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub shipping: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct RelatedQuestion {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub displayed_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub question: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub rank: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source_logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct RelatedSearch {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarAuthorArticle {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub authors: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub cited_by_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub cited_by_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub year: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarAuthorCitationResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub author_id: Option<String>,
pub citations_by_year: Vec<CitationByYear>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_citations: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarAuthorInfo {
pub affiliations: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub author_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub email_domain: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub homepage: Option<String>,
pub interests: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarAuthorResponse {
pub articles: Vec<ScholarAuthorArticle>,
pub author: Option<ScholarAuthorInfo>,
pub co_authors: Vec<ScholarCoAuthor>,
pub stats: Option<ScholarAuthorStats>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarAuthorStats {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub citations_all: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub citations_since_year: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub h_index_all: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub h_index_since_year: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub i10_index_all: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub i10_index_since_year: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub since_year: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarCitationFormat {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub citation: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub style: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarCitationLink {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarCiteResponse {
pub citations: Vec<ScholarCitationFormat>,
pub links: Vec<ScholarCitationLink>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarCoAuthor {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub affiliation: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub author_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarProfile {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub affiliation: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub author_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub cited_by: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub email_domain: Option<String>,
pub interests: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarProfilesResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub after_author: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub before_author: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
pub profiles: Vec<ScholarProfile>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarResult {
pub authors: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub cited_by_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub cited_by_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub pdf_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub publication_info: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub related_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub versions_count: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ScholarSearchResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub results: Vec<ScholarResult>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_results: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchInformation {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub organic_results_state: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query_displayed: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub time_taken: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_results: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchMode {
#[serde(rename = "full")]
Full,
#[serde(rename = "fast")]
Fast,
}
impl std::fmt::Display for SearchMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchMode::Full => "full",
SearchMode::Fast => "fast",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchPatentsLanguage {
#[serde(rename = "ENGLISH")]
English,
#[serde(rename = "GERMAN")]
German,
#[serde(rename = "CHINESE")]
Chinese,
#[serde(rename = "FRENCH")]
French,
#[serde(rename = "JAPANESE")]
Japanese,
#[serde(rename = "KOREAN")]
Korean,
#[serde(rename = "SPANISH")]
Spanish,
}
impl std::fmt::Display for SearchPatentsLanguage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchPatentsLanguage::English => "ENGLISH",
SearchPatentsLanguage::German => "GERMAN",
SearchPatentsLanguage::Chinese => "CHINESE",
SearchPatentsLanguage::French => "FRENCH",
SearchPatentsLanguage::Japanese => "JAPANESE",
SearchPatentsLanguage::Korean => "KOREAN",
SearchPatentsLanguage::Spanish => "SPANISH",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchPatentsPatentType {
#[serde(rename = "PATENT")]
Patent,
#[serde(rename = "DESIGN")]
Design,
}
impl std::fmt::Display for SearchPatentsPatentType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchPatentsPatentType::Patent => "PATENT",
SearchPatentsPatentType::Design => "DESIGN",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchPatentsSort {
#[serde(rename = "new")]
New,
#[serde(rename = "old")]
Old,
}
impl std::fmt::Display for SearchPatentsSort {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchPatentsSort::New => "new",
SearchPatentsSort::Old => "old",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchPatentsStatus {
#[serde(rename = "GRANT")]
Grant,
#[serde(rename = "APPLICATION")]
Application,
}
impl std::fmt::Display for SearchPatentsStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchPatentsStatus::Grant => "GRANT",
SearchPatentsStatus::Application => "APPLICATION",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingClickResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub merchant_domain: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub merchant_url: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub product_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source_query: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingFilter {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
pub options: Vec<ShoppingFilterOption>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingFilterOption {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub aria_label: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub label: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub value: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingPrice {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub extracted: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub value: Option<f64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingProductDetail {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub brand: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
pub images: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price_range_high: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price_range_low: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
pub sellers: Vec<ShoppingSeller>,
pub specs: HashMap<String, String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingProductResponse {
pub product: Option<ShoppingProductDetail>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingProductResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub click_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub delivery: Option<String>,
pub extensions: Vec<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub old_price: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub old_price_extracted: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_bool")]
pub on_sale: Option<bool>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub page_token: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
pub price: Option<ShoppingPrice>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub product_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub return_policy: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub reviews: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source_icon: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub tag: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingSearchResponse {
pub ads: Vec<ShoppingProductResult>,
pub filters: Vec<ShoppingFilter>,
pub pagination: Option<Pagination>,
pub results: Vec<ShoppingProductResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShoppingSeller {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub logo: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub name: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub original_price: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub price: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub rating: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub reviews_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub shipping: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub tax: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub total_cost: Option<f64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ShortVideoResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub account: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub duration: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub published: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub video_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub views: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Sitelink {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub snippet: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SnippetLink {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link_text: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsAutocompleteItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub mid: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsAutocompleteResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub results: Vec<TrendsAutocompleteItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsInterestResponse {
pub averages: Vec<TrendsTimelineValue>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub timeline: Vec<TrendsTimelinePoint>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsRegionInterest {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub max_value_index: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub region: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub region_code: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub value: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TrendsRegionsResolution {
#[serde(rename = "COUNTRY")]
Country,
#[serde(rename = "REGION")]
Region,
#[serde(rename = "DMA")]
Dma,
#[serde(rename = "CITY")]
City,
#[serde(rename = "auto")]
Auto,
}
impl std::fmt::Display for TrendsRegionsResolution {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
TrendsRegionsResolution::Country => "COUNTRY",
TrendsRegionsResolution::Region => "REGION",
TrendsRegionsResolution::Dma => "DMA",
TrendsRegionsResolution::City => "CITY",
TrendsRegionsResolution::Auto => "auto",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsRegionsResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub regions: Vec<TrendsRegionInterest>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsRelatedItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub topic_id: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub topic_type: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub value: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsRelatedResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub rising_queries: Vec<TrendsRelatedItem>,
pub rising_topics: Vec<TrendsRelatedItem>,
pub top_queries: Vec<TrendsRelatedItem>,
pub top_topics: Vec<TrendsRelatedItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TrendsSearchDataType {
#[serde(rename = "TIMESERIES")]
Timeseries,
#[serde(rename = "GEO_MAP")]
GeoMap,
#[serde(rename = "GEO_MAP_0")]
GeoMap0,
#[serde(rename = "RELATED_TOPICS")]
RelatedTopics,
#[serde(rename = "RELATED_QUERIES")]
RelatedQueries,
}
impl std::fmt::Display for TrendsSearchDataType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
TrendsSearchDataType::Timeseries => "TIMESERIES",
TrendsSearchDataType::GeoMap => "GEO_MAP",
TrendsSearchDataType::GeoMap0 => "GEO_MAP_0",
TrendsSearchDataType::RelatedTopics => "RELATED_TOPICS",
TrendsSearchDataType::RelatedQueries => "RELATED_QUERIES",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsSearchResponse {
pub averages: Vec<TrendsTimelineValue>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub data_type: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub regions: Vec<TrendsRegionInterest>,
pub rising_queries: Vec<TrendsRelatedItem>,
pub rising_topics: Vec<TrendsRelatedItem>,
pub timeline: Vec<TrendsTimelinePoint>,
pub top_queries: Vec<TrendsRelatedItem>,
pub top_topics: Vec<TrendsRelatedItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsTimelinePoint {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub timestamp: Option<i64>,
pub values: Vec<TrendsTimelineValue>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsTimelineValue {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub extracted_value: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub value: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsTrendingArticle {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsTrendingItem {
pub articles: Vec<TrendsTrendingArticle>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub traffic: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TrendsTrendingNowSort {
#[serde(rename = "relevance")]
Relevance,
#[serde(rename = "search_volume")]
SearchVolume,
#[serde(rename = "title")]
Title,
#[serde(rename = "recency")]
Recency,
}
impl std::fmt::Display for TrendsTrendingNowSort {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
TrendsTrendingNowSort::Relevance => "relevance",
TrendsTrendingNowSort::SearchVolume => "search_volume",
TrendsTrendingNowSort::Title => "title",
TrendsTrendingNowSort::Recency => "recency",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TrendsTrendingNowStatus {
#[serde(rename = "all")]
All,
#[serde(rename = "active")]
Active,
}
impl std::fmt::Display for TrendsTrendingNowStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
TrendsTrendingNowStatus::All => "all",
TrendsTrendingNowStatus::Active => "active",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TrendsTrendingResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
pub trending: Vec<TrendsTrendingItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ValidationError {
pub ctx: HashMap<String, Value>,
pub input: Option<Value>,
pub loc: Vec<Value>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub msg: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VideoResult {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub date: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub displayed_link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub duration: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub link: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub position: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub source: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub thumbnail: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VideosSearchResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub language: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub query: Option<String>,
pub results: Vec<VideoResult>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchAiModeParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetAutocompleteParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetFinanceQuoteParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct FlightsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub departure_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub arrival_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outbound_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trip_type: Option<FlightsSearchTripType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub adults: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub children: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub infants_in_seat: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub infants_on_lap: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub travel_class: Option<FlightsSearchTravelClass>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stops: Option<FlightsSearchStops>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_price: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct HotelDetailsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub property_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub check_in: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub check_out: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub adults: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct HotelsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub check_in: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub check_out: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub adults: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub children: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_by: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_price: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_price: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hotel_class: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_page_token: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchImagesParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tbs: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub imgsz: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub imgcolor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub imgtype: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub safe: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct JobsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub job_type: Option<JobsSearchJobType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_posted: Option<JobsSearchDatePosted>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ltype: Option<JobsSearchLtype>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chips: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uds: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uule: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lrad: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<JobsSearchMode>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchLensParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct LocalSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uule: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct MapsPhotosParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct MapsPlaceParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub place_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct MapsPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub place_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct MapsReviewsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub data_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_by: Option<MapsReviewsSortBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct MapsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ll: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchNewsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_results: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct NewsByTopicParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<NewsByTopicTopic>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_results: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendingNewsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_results: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetPatentDetailParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub patent_id: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchPatentsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<SearchPatentsSort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inventor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assignee: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<SearchPatentsLanguage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<SearchPatentsStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub patent_type: Option<SearchPatentsPatentType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetProductDetailParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_offers: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_variants: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resolve_deep_urls: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ScholarAuthorParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub author_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cstart: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagesize: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ScholarAuthorCitationParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub author_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ScholarCiteParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ScholarProfilesParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub mauthors: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after_author: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub before_author: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchScholarParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub as_ylo: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub as_yhi: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub as_sdt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tbs: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub safe: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uule: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nfpr: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ludocid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lsig: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kgmid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub si: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ibp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uds: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ai_overview: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<SearchMode>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ShoppingProductParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ShoppingProductClickParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ShoppingSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_price: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_price: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_by: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub free_shipping: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub on_sale: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ShortsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsAutocompleteParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tz: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsInterestParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gprop: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsRegionsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resolution: Option<TrendsRegionsResolution>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsRelatedParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsSearchParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_type: Option<TrendsSearchDataType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cat: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gprop: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tz: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsTrendingParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hours: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct TrendsTrendingNowParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hours: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<TrendsTrendingNowStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<TrendsTrendingNowSort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchVideosParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tbs: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub safe: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
}