use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "lowercase")]
pub enum Icon {
Svg,
Cim,
Png,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdditionalLocations {
pub drop_off: Option<NullablePoint>,
pub front_door: Option<NullablePoint>,
pub road: Option<NullablePoint>,
pub roof: Option<NullablePoint>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NullablePoint {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Address {
pub admin_region: Option<String>,
pub census_block_id: Option<String>,
pub country: Option<String>,
pub designated_market_area: Option<String>,
pub extended: Option<String>,
pub locality: Option<String>,
pub neighborhood: Option<Vec<String>>,
pub po_box: Option<String>,
pub postcode: Option<String>,
pub post_town: Option<String>,
pub region: Option<String>,
pub street_address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Category {
pub category_id: String,
pub label: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CategoryDetails {
pub category_id: String,
pub full_label: Vec<String>,
pub icon: Option<IconDetails>,
pub parents: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IconDetails {
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChainInfo {
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContactInfo {
pub email: Option<String>,
pub fax: Option<String>,
pub telephone: Option<String>,
pub website: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Error {
pub error: ErrorClass,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ErrorClass {
pub code: usize,
pub details: Option<Vec<String>>,
pub message: String,
pub rest_info_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Hours {
pub opening: Option<HoursByDay>,
pub opening_text: Option<String>,
pub popular: Option<HoursByDay>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HoursByDay {
pub friday: Option<Vec<TimeRange>>,
pub monday: Option<Vec<TimeRange>>,
pub saturday: Option<Vec<TimeRange>>,
pub sunday: Option<Vec<TimeRange>>,
pub thursday: Option<Vec<TimeRange>>,
pub tuesday: Option<Vec<TimeRange>>,
pub wednesday: Option<Vec<TimeRange>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeRange {
pub from: String,
pub to: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlaceResult {
pub categories: Vec<Category>,
pub distance: Option<f64>,
pub icon: Option<IconDetails>,
pub location: Point,
pub name: String,
pub place_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Point {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pagination {
pub next_url: Option<String>,
pub previous_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PlaceDetails {
pub additional_locations: Option<AdditionalLocations>,
pub address: Option<Address>,
pub categories: Option<Vec<Category>>,
pub chains: Option<Vec<ChainInfo>>,
pub contact_info: Option<ContactInfo>,
pub description: Option<String>,
pub hours: Option<Hours>,
pub icon: Option<IconDetails>,
pub location: Option<Point>,
pub name: Option<String>,
pub place_id: String,
pub rating: Option<Rating>,
pub social_media: Option<SocialMedia>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Rating {
pub price: Option<Price>,
pub user: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum Price {
Cheap,
Expensive,
Moderate,
#[serde(rename = "veryExpensive")]
VeryExpensive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SocialMedia {
pub facebook_id: Option<String>,
pub instagram: Option<String>,
pub twitter: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WithinExtentResult {
pub categories: Vec<Category>,
pub icon: Option<IconDetails>,
pub location: Point,
pub name: String,
pub place_id: String,
}