use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxSearchResponse {
#[serde(rename = "type", default)]
pub response_type: Option<String>,
#[serde(default)]
pub features: Vec<MapBoxFeature>,
#[serde(default, rename = "attribution")]
pub attribution: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxFeature {
#[serde(rename = "type", default)]
pub feature_type: Option<String>,
#[serde(default)]
pub id: Option<String>,
#[serde(default, rename = "geometry")]
pub geometry: Option<MapBoxGeometry>,
#[serde(default, rename = "properties")]
pub properties: Option<MapBoxProperties>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxProperties {
#[serde(default, rename = "mapbox_id")]
pub mapbox_id: Option<String>,
#[serde(default, rename = "feature_type")]
pub feature_type: Option<String>,
#[serde(default, rename = "full_address")]
pub full_address: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default, rename = "name_preferred")]
pub name_preferred: Option<String>,
#[serde(default, rename = "place_formatted")]
pub place_formatted: Option<String>,
#[serde(default, rename = "coordinates")]
pub coordinates: Option<MapBoxCoordinates>,
#[serde(default, rename = "bbox")]
pub bbox: Option<Vec<f64>>,
#[serde(default)]
pub context: Option<MapBoxContext>,
#[serde(default, rename = "additional_feature_types")]
pub additional_feature_types: Option<Vec<String>>,
#[serde(default)]
pub address: Option<String>,
#[serde(default)]
pub category: Option<String>,
#[serde(default)]
pub relevance: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxCoordinates {
#[serde(default)]
pub longitude: f64,
#[serde(default)]
pub latitude: f64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxContext {
#[serde(default)]
pub region: Option<MapBoxContextEntry>,
#[serde(default)]
pub country: Option<MapBoxContextEntry>,
#[serde(default)]
pub district: Option<MapBoxContextEntry>,
#[serde(default)]
pub place: Option<MapBoxContextEntry>,
#[serde(default)]
pub neighborhood: Option<MapBoxContextEntry>,
#[serde(default)]
pub street: Option<MapBoxContextEntry>,
#[serde(default)]
pub postcode: Option<MapBoxContextEntry>,
#[serde(default)]
pub address: Option<MapBoxContextEntry>,
#[serde(default)]
pub poi: Option<MapBoxContextEntry>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxContextEntry {
#[serde(default, rename = "mapbox_id")]
pub mapbox_id: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default, rename = "region_code")]
pub region_code: Option<String>,
#[serde(default, rename = "country_code")]
pub country_code: Option<String>,
#[serde(default, rename = "country_code_alpha_3")]
pub country_code_alpha_3: Option<String>,
#[serde(default)]
pub wikidata_id: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MapBoxGeometry {
#[serde(rename = "type", default)]
pub geometry_type: Option<String>,
#[serde(default)]
pub coordinates: Option<serde_json::Value>,
}