mindat_rs/models/
occurrences.rs1use serde::{Deserialize, Serialize};
8
9use super::serde_helpers::{deserialize_i64, deserialize_optional_i32, deserialize_optional_i64};
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct Occurrence {
14 #[serde(deserialize_with = "deserialize_i64")]
16 pub id: i64,
17 #[serde(default, deserialize_with = "deserialize_optional_i64")]
19 pub min: Option<i64>,
20 #[serde(default, deserialize_with = "deserialize_optional_i64")]
22 pub loc: Option<i64>,
23 #[serde(default)]
25 pub typeloc: Option<serde_json::Value>,
26 #[serde(default)]
28 pub questioned: Option<serde_json::Value>,
29 #[serde(default, deserialize_with = "deserialize_optional_i64")]
31 pub refid: Option<i64>,
32 #[serde(default)]
34 pub description: Option<String>,
35 #[serde(default)]
37 pub quality: Option<serde_json::Value>,
38 #[serde(default)]
40 pub rarity: Option<serde_json::Value>,
41 #[serde(default)]
43 pub habit: Option<String>,
44 #[serde(default)]
46 pub fluorescence: Option<String>,
47 #[serde(default)]
49 pub colour: Option<String>,
50 #[serde(default)]
52 pub cfmethods: Option<String>,
53 #[serde(default)]
55 pub cfref: Option<String>,
56 #[serde(default)]
58 pub reftxt: Option<String>,
59 #[serde(default)]
61 pub datemodify: Option<String>,
62 #[serde(default)]
64 pub specdisp: Option<String>,
65 #[serde(default)]
67 pub lorevtxtd: Option<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct OccurrenceStatistics {
74 #[serde(default, deserialize_with = "deserialize_optional_i64")]
76 pub lstm_loc: Option<i64>,
77 #[serde(default, deserialize_with = "deserialize_optional_i64")]
79 pub lstm_min: Option<i64>,
80 #[serde(default, deserialize_with = "deserialize_optional_i64")]
82 pub lstm_numlocs: Option<i64>,
83 #[serde(default, deserialize_with = "deserialize_optional_i32")]
85 pub lstm_imavar: Option<i32>,
86 #[serde(default, deserialize_with = "deserialize_optional_i32")]
88 pub lstm_imareal: Option<i32>,
89 #[serde(default, deserialize_with = "deserialize_optional_i64")]
91 pub lstm_photocount: Option<i64>,
92 #[serde(default, deserialize_with = "deserialize_optional_i64")]
94 pub lstm_islocentry: Option<i64>,
95 #[serde(default, deserialize_with = "deserialize_optional_i32")]
97 pub lstm_typeloc: Option<i32>,
98 #[serde(default, deserialize_with = "deserialize_optional_i32")]
100 pub lstm_qualitymax: Option<i32>,
101 #[serde(default, deserialize_with = "deserialize_optional_i32")]
103 pub lstm_questioned: Option<i32>,
104 #[serde(default)]
106 pub lstm_sublocslist: Option<String>,
107 #[serde(default)]
109 pub lstm_display_name: Option<String>,
110 #[serde(default)]
112 pub lstm_changed: Option<String>,
113}
114
115#[derive(Debug, Clone, Default)]
117pub struct OccurrencesQuery {
118 pub min: Option<i64>,
120 pub loc: Option<i64>,
122 pub colour: Option<String>,
124 pub habit: Option<String>,
126 pub fluorescence: Option<String>,
128 pub description: Option<String>,
130 pub datemodify_after: Option<String>,
132 pub datemodify_before: Option<String>,
134 pub ordering: Option<String>,
136 pub fields: Option<String>,
138 pub omit: Option<String>,
140 pub page: Option<i32>,
142 pub page_size: Option<i32>,
144}
145
146impl OccurrencesQuery {
147 pub fn new() -> Self {
149 Self::default()
150 }
151
152 pub fn mineral(mut self, mineral_id: i64) -> Self {
154 self.min = Some(mineral_id);
155 self
156 }
157
158 pub fn locality(mut self, locality_id: i64) -> Self {
160 self.loc = Some(locality_id);
161 self
162 }
163
164 pub fn page(mut self, page: i32) -> Self {
166 self.page = Some(page);
167 self
168 }
169
170 pub fn page_size(mut self, size: i32) -> Self {
172 self.page_size = Some(size);
173 self
174 }
175}
176
177#[derive(Debug, Clone, Default)]
179pub struct OccurrenceStatisticsQuery {
180 pub lstm_min: Option<i64>,
182 pub lstm_loc: Option<i64>,
184 pub photocount_min: Option<i64>,
186 pub photocount_max: Option<i64>,
188 pub ordering: Option<String>,
190 pub page: Option<i32>,
192 pub page_size: Option<i32>,
194}
195
196impl OccurrenceStatisticsQuery {
197 pub fn new() -> Self {
199 Self::default()
200 }
201
202 pub fn mineral(mut self, mineral_id: i64) -> Self {
204 self.lstm_min = Some(mineral_id);
205 self
206 }
207
208 pub fn locality(mut self, locality_id: i64) -> Self {
210 self.lstm_loc = Some(locality_id);
211 self
212 }
213
214 pub fn page(mut self, page: i32) -> Self {
216 self.page = Some(page);
217 self
218 }
219
220 pub fn page_size(mut self, size: i32) -> Self {
222 self.page_size = Some(size);
223 self
224 }
225}