use derive_getters::Getters;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, derive_builder::Builder, Getters)]
#[builder(setter(into, strip_option))]
#[serde(rename_all = "camelCase")]
pub struct PlaceSearchParameters {
#[serde(rename = "x")]
x: f64,
#[serde(rename = "y")]
y: f64,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
radius: Option<f64>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
category_ids: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
search_text: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
page_size: Option<u32>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
page_token: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "inSR")]
in_sr: Option<u32>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "outSR")]
out_sr: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceSearchResult {
#[serde(default)]
results: Vec<PlaceInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
next_page_token: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceInfo {
place_id: String,
name: String,
#[serde(default)]
categories: Vec<PlaceCategory>,
#[serde(skip_serializing_if = "Option::is_none")]
location: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
address: Option<PlaceAddress>,
#[serde(skip_serializing_if = "Option::is_none")]
contact_info: Option<PlaceContactInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
distance: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
attributes: Option<Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceCategory {
category_id: String,
label: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceAddress {
#[serde(skip_serializing_if = "Option::is_none")]
street_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
locality: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
postal_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
country: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
admin_region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
po_box: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
neighborhood: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceContactInfo {
#[serde(skip_serializing_if = "Option::is_none")]
telephone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
website: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
fax_number: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceDetailsResult {
place: PlaceInfo,
#[serde(skip_serializing_if = "Option::is_none")]
hours: Option<PlaceHours>,
#[serde(skip_serializing_if = "Option::is_none")]
rating: Option<PlaceRating>,
#[serde(skip_serializing_if = "Option::is_none")]
social_media: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceHours {
#[serde(default)]
opening_hours: Vec<DayHours>,
#[serde(skip_serializing_if = "Option::is_none")]
popular_times: Option<Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct DayHours {
day: String,
#[serde(skip_serializing_if = "Option::is_none")]
open: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
close: Option<String>,
#[serde(default)]
is_closed: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct PlaceRating {
#[serde(skip_serializing_if = "Option::is_none")]
user: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
price: Option<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct CategoriesResult {
#[serde(default)]
categories: Vec<CategoryInfo>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct CategoryInfo {
category_id: String,
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
full_label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
parent_category_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
icon: Option<String>,
}