use serde::{Deserialize, Serialize};
use super::common::{BaseEntity, Extra};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlaceName {
pub lang: String,
pub value: String,
#[serde(default, skip_serializing_if = "is_false")]
pub is_primary: bool,
#[serde(flatten)]
pub extra: Extra,
}
fn is_false(b: &bool) -> bool {
!*b
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Coordinates {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lat: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lon: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub precision: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CountryHistoryEntry {
pub country: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub until: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PlaceIdentifiers {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub wikidata: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub geonames: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub insee: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Place {
#[serde(flatten)]
pub base: BaseEntity,
pub names: Vec<PlaceName>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub place_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub country_current: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coordinates: Option<Coordinates>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub country_history: Vec<CountryHistoryEntry>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub identifiers: Option<PlaceIdentifiers>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}