1use serde::{Deserialize, Serialize};
4
5use super::serde_helpers::{
6 deserialize_i64, deserialize_optional_f64, deserialize_optional_i16, deserialize_optional_i32,
7 deserialize_optional_vec_i32,
8};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Locality {
13 pub id: i32,
15 #[serde(default)]
17 pub longid: Option<String>,
18 #[serde(default)]
20 pub guid: Option<String>,
21 #[serde(default)]
23 pub txt: Option<String>,
24 #[serde(default)]
26 pub revtxtd: Option<String>,
27 #[serde(default)]
29 pub description_short: Option<String>,
30 #[serde(default, deserialize_with = "deserialize_optional_f64")]
32 pub latitude: Option<f64>,
33 #[serde(default, deserialize_with = "deserialize_optional_f64")]
35 pub longitude: Option<f64>,
36 #[serde(default)]
38 pub langtxt: Option<String>,
39 #[serde(default)]
41 pub dateadd: Option<String>,
42 #[serde(default)]
44 pub datemodify: Option<String>,
45 #[serde(default)]
47 pub elements: Option<String>,
48 #[serde(default)]
50 pub country: Option<String>,
51 #[serde(default)]
53 pub refs: Option<String>,
54 #[serde(default, deserialize_with = "deserialize_optional_i32")]
56 pub coordsystem: Option<i32>,
57 #[serde(default, deserialize_with = "deserialize_optional_i32")]
59 pub parent: Option<i32>,
60 #[serde(default)]
62 pub links: Option<String>,
63 #[serde(default, deserialize_with = "deserialize_optional_i32")]
65 pub area: Option<i32>,
66 #[serde(default, deserialize_with = "deserialize_optional_i32")]
68 pub non_hierarchical: Option<i32>,
69 #[serde(default, deserialize_with = "deserialize_optional_i32")]
71 pub age: Option<i32>,
72 #[serde(default, deserialize_with = "deserialize_optional_i32")]
74 pub meteorite_type: Option<i32>,
75 #[serde(default, deserialize_with = "deserialize_optional_i32")]
77 pub company: Option<i32>,
78 #[serde(default, deserialize_with = "deserialize_optional_i32")]
80 pub company2: Option<i32>,
81 #[serde(default, deserialize_with = "deserialize_optional_i32")]
83 pub loc_status: Option<i32>,
84 #[serde(default, deserialize_with = "deserialize_optional_i32")]
86 pub loc_group: Option<i32>,
87 #[serde(default)]
89 pub status_year: Option<String>,
90 #[serde(default)]
92 pub company_year: Option<String>,
93 #[serde(default, deserialize_with = "deserialize_optional_i32")]
95 pub discovered_before: Option<i32>,
96 #[serde(default, deserialize_with = "deserialize_optional_i32")]
98 pub discovery_year: Option<i32>,
99 #[serde(default)]
101 pub discovery_year_type: Option<String>,
102 #[serde(default, deserialize_with = "deserialize_optional_i32")]
104 pub level: Option<i32>,
105 #[serde(default)]
107 pub locsinclude: Option<String>,
108 #[serde(default)]
110 pub locsexclude: Option<String>,
111 #[serde(default)]
113 pub wikipedia: Option<String>,
114 #[serde(default)]
116 pub osmid: Option<String>,
117 #[serde(default, deserialize_with = "deserialize_optional_i32")]
119 pub geonames: Option<i32>,
120 #[serde(default)]
122 pub timestamp: Option<String>,
123 #[serde(default, deserialize_with = "deserialize_optional_vec_i32")]
125 pub geomaterials: Option<Vec<i32>>,
126}
127
128#[derive(Debug, Clone, Default)]
130pub struct LocalitiesQuery {
131 pub country: Option<String>,
133 pub txt: Option<String>,
135 pub description: Option<String>,
137 pub elements_inc: Option<String>,
139 pub elements_exc: Option<String>,
141 pub id_in: Option<Vec<i32>>,
143 pub level_gte: Option<i32>,
145 pub level_lte: Option<i32>,
147 pub sublocs_gte: Option<i32>,
149 pub sublocs_lte: Option<i32>,
151 pub non_hierarchial: Option<i32>,
153 pub revtxtd_istartswith: Option<String>,
155 pub updated_at: Option<String>,
157 pub fields: Option<String>,
159 pub omit: Option<String>,
161 pub expand: Option<Vec<String>>,
163 pub page_size: Option<i32>,
165 pub page: Option<i32>,
167}
168
169impl LocalitiesQuery {
170 pub fn new() -> Self {
172 Self::default()
173 }
174
175 pub fn country(mut self, country: impl Into<String>) -> Self {
177 self.country = Some(country.into());
178 self
179 }
180
181 pub fn name_contains(mut self, txt: impl Into<String>) -> Self {
183 self.txt = Some(txt.into());
184 self
185 }
186
187 pub fn description_contains(mut self, desc: impl Into<String>) -> Self {
189 self.description = Some(desc.into());
190 self
191 }
192
193 pub fn with_elements(mut self, elements: impl Into<String>) -> Self {
195 self.elements_inc = Some(elements.into());
196 self
197 }
198
199 pub fn without_elements(mut self, elements: impl Into<String>) -> Self {
201 self.elements_exc = Some(elements.into());
202 self
203 }
204
205 pub fn select_fields(mut self, fields: impl Into<String>) -> Self {
207 self.fields = Some(fields.into());
208 self
209 }
210
211 pub fn omit_fields(mut self, fields: impl Into<String>) -> Self {
213 self.omit = Some(fields.into());
214 self
215 }
216
217 pub fn expand_fields(mut self, fields: Vec<String>) -> Self {
219 self.expand = Some(fields);
220 self
221 }
222
223 pub fn level_range(mut self, min: i32, max: i32) -> Self {
225 self.level_gte = Some(min);
226 self.level_lte = Some(max);
227 self
228 }
229
230 pub fn page_size(mut self, size: i32) -> Self {
232 self.page_size = Some(size);
233 self
234 }
235
236 pub fn page(mut self, page: i32) -> Self {
238 self.page = Some(page);
239 self
240 }
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct LocalityAge {
246 pub age_id: i32,
248 #[serde(default, deserialize_with = "deserialize_optional_f64")]
250 pub age_mav: Option<f64>,
251 #[serde(default, deserialize_with = "deserialize_optional_f64")]
253 pub age_pmv: Option<f64>,
254 #[serde(default, deserialize_with = "deserialize_optional_f64")]
256 pub age_ma2v: Option<f64>,
257 #[serde(default, deserialize_with = "deserialize_optional_f64")]
259 pub age_pm2v: Option<f64>,
260 #[serde(default)]
262 pub agemethod: Option<String>,
263 #[serde(default)]
265 pub agereference: Option<String>,
266 #[serde(default)]
268 pub age_ma: Option<String>,
269 #[serde(default)]
271 pub age_pm: Option<String>,
272 #[serde(default)]
274 pub age_ma2: Option<String>,
275 #[serde(default)]
277 pub age_pm2: Option<String>,
278 #[serde(default, deserialize_with = "deserialize_optional_i32")]
280 pub ages1: Option<i32>,
281 #[serde(default, deserialize_with = "deserialize_optional_i32")]
283 pub ages2: Option<i32>,
284 #[serde(default, deserialize_with = "deserialize_optional_i32")]
286 pub age_type: Option<i32>,
287}
288
289#[derive(Debug, Clone, Serialize, Deserialize)]
291pub struct LocalityStatus {
292 pub ls_id: i32,
294 pub ls_text: String,
296 #[serde(default, deserialize_with = "deserialize_optional_i32")]
298 pub ls_historical: Option<i32>,
299 #[serde(default, deserialize_with = "deserialize_optional_i32")]
301 pub ls_wide: Option<i32>,
302}
303
304#[derive(Debug, Clone, Serialize, Deserialize)]
306pub struct LocalityType {
307 pub lt_id: i32,
309 pub lt_text: String,
311 #[serde(default, deserialize_with = "deserialize_optional_i32")]
313 pub lt_parent: Option<i32>,
314 #[serde(default, deserialize_with = "deserialize_optional_i16")]
316 pub lt_sortorder: Option<i16>,
317 #[serde(default, deserialize_with = "deserialize_optional_i32")]
319 pub lt_erratic: Option<i32>,
320 #[serde(default, deserialize_with = "deserialize_optional_i32")]
322 pub lt_area: Option<i32>,
323 #[serde(default, deserialize_with = "deserialize_optional_i32")]
325 pub lt_underground: Option<i32>,
326}
327
328#[derive(Debug, Clone, Serialize, Deserialize)]
330pub struct LocalityTranslation {
331 #[serde(deserialize_with = "deserialize_i64")]
333 pub lt_id: i64,
334 #[serde(default, deserialize_with = "deserialize_optional_i32")]
336 pub lt_loc: Option<i32>,
337 #[serde(default)]
339 pub lt_text: Option<String>,
340 #[serde(default)]
342 pub lt_datetime: Option<String>,
343 #[serde(default, deserialize_with = "deserialize_optional_i32")]
345 pub lt_uid: Option<i32>,
346 #[serde(default)]
348 pub lt_iso: Option<String>,
349 #[serde(default, deserialize_with = "deserialize_optional_i32")]
351 pub lt_important: Option<i32>,
352}
353
354#[derive(Debug, Clone, Default)]
356pub struct LocalityTranslationsQuery {
357 pub lt_loc: Option<i32>,
359 pub lt_iso: Option<String>,
361 pub lt_text: Option<String>,
363 pub lt_important: Option<i32>,
365 pub lt_datetime_gte: Option<String>,
367 pub ordering: Option<String>,
369 pub page: Option<i32>,
371 pub page_size: Option<i32>,
373}
374
375impl LocalityTranslationsQuery {
376 pub fn new() -> Self {
378 Self::default()
379 }
380
381 pub fn locality(mut self, locality_id: i32) -> Self {
383 self.lt_loc = Some(locality_id);
384 self
385 }
386
387 pub fn language(mut self, iso: impl Into<String>) -> Self {
389 self.lt_iso = Some(iso.into());
390 self
391 }
392
393 pub fn page(mut self, page: i32) -> Self {
395 self.page = Some(page);
396 self
397 }
398
399 pub fn page_size(mut self, size: i32) -> Self {
401 self.page_size = Some(size);
402 self
403 }
404}