use serde::{Deserialize, Serialize};
use super::serde_helpers::{
deserialize_i64, deserialize_optional_f64, deserialize_optional_i16, deserialize_optional_i32,
deserialize_optional_vec_i32,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Locality {
pub id: i32,
#[serde(default)]
pub longid: Option<String>,
#[serde(default)]
pub guid: Option<String>,
#[serde(default)]
pub txt: Option<String>,
#[serde(default)]
pub revtxtd: Option<String>,
#[serde(default)]
pub description_short: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub latitude: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub longitude: Option<f64>,
#[serde(default)]
pub langtxt: Option<String>,
#[serde(default)]
pub dateadd: Option<String>,
#[serde(default)]
pub datemodify: Option<String>,
#[serde(default)]
pub elements: Option<String>,
#[serde(default)]
pub country: Option<String>,
#[serde(default)]
pub refs: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub coordsystem: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub parent: Option<i32>,
#[serde(default)]
pub links: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub area: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub non_hierarchical: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub age: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub meteorite_type: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub company: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub company2: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub loc_status: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub loc_group: Option<i32>,
#[serde(default)]
pub status_year: Option<String>,
#[serde(default)]
pub company_year: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub discovered_before: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub discovery_year: Option<i32>,
#[serde(default)]
pub discovery_year_type: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub level: Option<i32>,
#[serde(default)]
pub locsinclude: Option<String>,
#[serde(default)]
pub locsexclude: Option<String>,
#[serde(default)]
pub wikipedia: Option<String>,
#[serde(default)]
pub osmid: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub geonames: Option<i32>,
#[serde(default)]
pub timestamp: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_vec_i32")]
pub geomaterials: Option<Vec<i32>>,
}
#[derive(Debug, Clone, Default)]
pub struct LocalitiesQuery {
pub country: Option<String>,
pub txt: Option<String>,
pub description: Option<String>,
pub elements_inc: Option<String>,
pub elements_exc: Option<String>,
pub id_in: Option<Vec<i32>>,
pub level_gte: Option<i32>,
pub level_lte: Option<i32>,
pub sublocs_gte: Option<i32>,
pub sublocs_lte: Option<i32>,
pub non_hierarchial: Option<i32>,
pub revtxtd_istartswith: Option<String>,
pub updated_at: Option<String>,
pub fields: Option<String>,
pub omit: Option<String>,
pub expand: Option<Vec<String>>,
pub page_size: Option<i32>,
pub page: Option<i32>,
}
impl LocalitiesQuery {
pub fn new() -> Self {
Self::default()
}
pub fn country(mut self, country: impl Into<String>) -> Self {
self.country = Some(country.into());
self
}
pub fn name_contains(mut self, txt: impl Into<String>) -> Self {
self.txt = Some(txt.into());
self
}
pub fn description_contains(mut self, desc: impl Into<String>) -> Self {
self.description = Some(desc.into());
self
}
pub fn with_elements(mut self, elements: impl Into<String>) -> Self {
self.elements_inc = Some(elements.into());
self
}
pub fn without_elements(mut self, elements: impl Into<String>) -> Self {
self.elements_exc = Some(elements.into());
self
}
pub fn select_fields(mut self, fields: impl Into<String>) -> Self {
self.fields = Some(fields.into());
self
}
pub fn omit_fields(mut self, fields: impl Into<String>) -> Self {
self.omit = Some(fields.into());
self
}
pub fn expand_fields(mut self, fields: Vec<String>) -> Self {
self.expand = Some(fields);
self
}
pub fn level_range(mut self, min: i32, max: i32) -> Self {
self.level_gte = Some(min);
self.level_lte = Some(max);
self
}
pub fn page_size(mut self, size: i32) -> Self {
self.page_size = Some(size);
self
}
pub fn page(mut self, page: i32) -> Self {
self.page = Some(page);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalityAge {
pub age_id: i32,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub age_mav: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub age_pmv: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub age_ma2v: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub age_pm2v: Option<f64>,
#[serde(default)]
pub agemethod: Option<String>,
#[serde(default)]
pub agereference: Option<String>,
#[serde(default)]
pub age_ma: Option<String>,
#[serde(default)]
pub age_pm: Option<String>,
#[serde(default)]
pub age_ma2: Option<String>,
#[serde(default)]
pub age_pm2: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub ages1: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub ages2: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub age_type: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalityStatus {
pub ls_id: i32,
pub ls_text: String,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub ls_historical: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub ls_wide: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalityType {
pub lt_id: i32,
pub lt_text: String,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_parent: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i16")]
pub lt_sortorder: Option<i16>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_erratic: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_area: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_underground: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalityTranslation {
#[serde(deserialize_with = "deserialize_i64")]
pub lt_id: i64,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_loc: Option<i32>,
#[serde(default)]
pub lt_text: Option<String>,
#[serde(default)]
pub lt_datetime: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_uid: Option<i32>,
#[serde(default)]
pub lt_iso: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lt_important: Option<i32>,
}
#[derive(Debug, Clone, Default)]
pub struct LocalityTranslationsQuery {
pub lt_loc: Option<i32>,
pub lt_iso: Option<String>,
pub lt_text: Option<String>,
pub lt_important: Option<i32>,
pub lt_datetime_gte: Option<String>,
pub ordering: Option<String>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl LocalityTranslationsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn locality(mut self, locality_id: i32) -> Self {
self.lt_loc = Some(locality_id);
self
}
pub fn language(mut self, iso: impl Into<String>) -> Self {
self.lt_iso = Some(iso.into());
self
}
pub fn page(mut self, page: i32) -> Self {
self.page = Some(page);
self
}
pub fn page_size(mut self, size: i32) -> Self {
self.page_size = Some(size);
self
}
}