use serde::{Deserialize, Serialize};
use super::de::null_default;
#[derive(Debug, Clone, PartialEq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Location {
#[serde(default, deserialize_with = "null_default")]
pub continent: Continent,
#[serde(default, deserialize_with = "null_default")]
pub country: Country,
#[serde(default, deserialize_with = "null_default")]
pub region: Region,
#[serde(default, deserialize_with = "null_default")]
pub city: String,
#[serde(default, deserialize_with = "null_default")]
pub postal: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub latitude: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub longitude: Option<f64>,
#[serde(default, deserialize_with = "null_default")]
pub language: Language,
#[serde(default, deserialize_with = "null_default")]
pub in_eu: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Continent {
#[serde(default, deserialize_with = "null_default")]
pub code: String,
#[serde(default, deserialize_with = "null_default")]
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Country {
#[serde(default, deserialize_with = "null_default")]
pub area: f64,
#[serde(default, deserialize_with = "null_default")]
pub borders: Vec<String>,
#[serde(default, deserialize_with = "null_default")]
pub calling_code: String,
#[serde(default, deserialize_with = "null_default")]
pub capital: String,
#[serde(default, deserialize_with = "null_default")]
pub code: String,
#[serde(default, deserialize_with = "null_default")]
pub name: String,
#[serde(default, deserialize_with = "null_default")]
pub population: u64,
#[serde(default, deserialize_with = "null_default")]
pub population_density: f64,
#[serde(default, deserialize_with = "null_default")]
pub flag: Flag,
#[serde(default, deserialize_with = "null_default")]
pub languages: Vec<Language>,
#[serde(default, deserialize_with = "null_default")]
pub tld: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Region {
#[serde(default, deserialize_with = "null_default")]
pub code: String,
#[serde(default, deserialize_with = "null_default")]
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Language {
#[serde(default, deserialize_with = "null_default")]
pub code: String,
#[serde(default, deserialize_with = "null_default")]
pub name: String,
#[serde(default, rename = "native", deserialize_with = "null_default")]
pub native_name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Flag {
#[serde(default, deserialize_with = "null_default")]
pub emoji: String,
#[serde(default, deserialize_with = "null_default")]
pub emoji_unicode: String,
#[serde(default, deserialize_with = "null_default")]
pub emojitwo: String,
#[serde(default, deserialize_with = "null_default")]
pub noto: String,
#[serde(default, deserialize_with = "null_default")]
pub twemoji: String,
#[serde(default, deserialize_with = "null_default")]
pub wikimedia: String,
}