use serde::{Deserialize, Serialize};
use super::serde_helpers::{deserialize_i64, deserialize_optional_i32, deserialize_optional_i64};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Occurrence {
#[serde(deserialize_with = "deserialize_i64")]
pub id: i64,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub min: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub loc: Option<i64>,
#[serde(default)]
pub typeloc: Option<serde_json::Value>,
#[serde(default)]
pub questioned: Option<serde_json::Value>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub refid: Option<i64>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub quality: Option<serde_json::Value>,
#[serde(default)]
pub rarity: Option<serde_json::Value>,
#[serde(default)]
pub habit: Option<String>,
#[serde(default)]
pub fluorescence: Option<String>,
#[serde(default)]
pub colour: Option<String>,
#[serde(default)]
pub cfmethods: Option<String>,
#[serde(default)]
pub cfref: Option<String>,
#[serde(default)]
pub reftxt: Option<String>,
#[serde(default)]
pub datemodify: Option<String>,
#[serde(default)]
pub specdisp: Option<String>,
#[serde(default)]
pub lorevtxtd: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OccurrenceStatistics {
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub lstm_loc: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub lstm_min: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub lstm_numlocs: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lstm_imavar: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lstm_imareal: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub lstm_photocount: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i64")]
pub lstm_islocentry: Option<i64>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lstm_typeloc: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lstm_qualitymax: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub lstm_questioned: Option<i32>,
#[serde(default)]
pub lstm_sublocslist: Option<String>,
#[serde(default)]
pub lstm_display_name: Option<String>,
#[serde(default)]
pub lstm_changed: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct OccurrencesQuery {
pub min: Option<i64>,
pub loc: Option<i64>,
pub colour: Option<String>,
pub habit: Option<String>,
pub fluorescence: Option<String>,
pub description: Option<String>,
pub datemodify_after: Option<String>,
pub datemodify_before: Option<String>,
pub ordering: Option<String>,
pub fields: Option<String>,
pub omit: Option<String>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl OccurrencesQuery {
pub fn new() -> Self {
Self::default()
}
pub fn mineral(mut self, mineral_id: i64) -> Self {
self.min = Some(mineral_id);
self
}
pub fn locality(mut self, locality_id: i64) -> Self {
self.loc = Some(locality_id);
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
}
}
#[derive(Debug, Clone, Default)]
pub struct OccurrenceStatisticsQuery {
pub lstm_min: Option<i64>,
pub lstm_loc: Option<i64>,
pub photocount_min: Option<i64>,
pub photocount_max: Option<i64>,
pub ordering: Option<String>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl OccurrenceStatisticsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn mineral(mut self, mineral_id: i64) -> Self {
self.lstm_min = Some(mineral_id);
self
}
pub fn locality(mut self, locality_id: i64) -> Self {
self.lstm_loc = Some(locality_id);
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
}
}