1use serde::{Deserialize, Serialize};
4
5use super::serde_helpers::{
6 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 updated_at: Option<String>,
145 pub fields: Option<String>,
147 pub omit: Option<String>,
149 pub expand: Option<Vec<String>>,
151 pub cursor: Option<String>,
153 pub page_size: Option<i32>,
155 pub page: Option<i32>,
157}
158
159impl LocalitiesQuery {
160 pub fn new() -> Self {
162 Self::default()
163 }
164
165 pub fn country(mut self, country: impl Into<String>) -> Self {
167 self.country = Some(country.into());
168 self
169 }
170
171 pub fn name_contains(mut self, txt: impl Into<String>) -> Self {
173 self.txt = Some(txt.into());
174 self
175 }
176
177 pub fn description_contains(mut self, desc: impl Into<String>) -> Self {
179 self.description = Some(desc.into());
180 self
181 }
182
183 pub fn with_elements(mut self, elements: impl Into<String>) -> Self {
185 self.elements_inc = Some(elements.into());
186 self
187 }
188
189 pub fn without_elements(mut self, elements: impl Into<String>) -> Self {
191 self.elements_exc = Some(elements.into());
192 self
193 }
194
195 pub fn select_fields(mut self, fields: impl Into<String>) -> Self {
197 self.fields = Some(fields.into());
198 self
199 }
200
201 pub fn omit_fields(mut self, fields: impl Into<String>) -> Self {
203 self.omit = Some(fields.into());
204 self
205 }
206
207 pub fn expand_fields(mut self, fields: Vec<String>) -> Self {
209 self.expand = Some(fields);
210 self
211 }
212
213 pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
215 self.cursor = Some(cursor.into());
216 self
217 }
218
219 pub fn page_size(mut self, size: i32) -> Self {
221 self.page_size = Some(size);
222 self
223 }
224
225 pub fn page(mut self, page: i32) -> Self {
227 self.page = Some(page);
228 self
229 }
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct LocalityAge {
235 pub age_id: i32,
237 #[serde(default, deserialize_with = "deserialize_optional_f64")]
239 pub age_mav: Option<f64>,
240 #[serde(default, deserialize_with = "deserialize_optional_f64")]
242 pub age_pmv: Option<f64>,
243 #[serde(default, deserialize_with = "deserialize_optional_f64")]
245 pub age_ma2v: Option<f64>,
246 #[serde(default, deserialize_with = "deserialize_optional_f64")]
248 pub age_pm2v: Option<f64>,
249 #[serde(default)]
251 pub agemethod: Option<String>,
252 #[serde(default)]
254 pub agereference: Option<String>,
255 #[serde(default)]
257 pub age_ma: Option<String>,
258 #[serde(default)]
260 pub age_pm: Option<String>,
261 #[serde(default)]
263 pub age_ma2: Option<String>,
264 #[serde(default)]
266 pub age_pm2: Option<String>,
267 #[serde(default, deserialize_with = "deserialize_optional_i32")]
269 pub ages1: Option<i32>,
270 #[serde(default, deserialize_with = "deserialize_optional_i32")]
272 pub ages2: Option<i32>,
273 #[serde(default, deserialize_with = "deserialize_optional_i32")]
275 pub age_type: Option<i32>,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280pub struct LocalityStatus {
281 pub ls_id: i32,
283 pub ls_text: String,
285 #[serde(default, deserialize_with = "deserialize_optional_i32")]
287 pub ls_historical: Option<i32>,
288 #[serde(default, deserialize_with = "deserialize_optional_i32")]
290 pub ls_wide: Option<i32>,
291}
292
293#[derive(Debug, Clone, Serialize, Deserialize)]
295pub struct LocalityType {
296 pub lt_id: i32,
298 pub lt_text: String,
300 #[serde(default, deserialize_with = "deserialize_optional_i32")]
302 pub lt_parent: Option<i32>,
303 #[serde(default, deserialize_with = "deserialize_optional_i16")]
305 pub lt_sortorder: Option<i16>,
306 #[serde(default, deserialize_with = "deserialize_optional_i32")]
308 pub lt_erratic: Option<i32>,
309 #[serde(default, deserialize_with = "deserialize_optional_i32")]
311 pub lt_area: Option<i32>,
312 #[serde(default, deserialize_with = "deserialize_optional_i32")]
314 pub lt_underground: Option<i32>,
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
319pub struct GeoRegion {
320 pub id: i32,
322 #[serde(default)]
324 pub lgr_revtxtd: Option<String>,
325 #[serde(default)]
327 pub lgr_updttime: Option<String>,
328 #[serde(default, deserialize_with = "deserialize_optional_i32")]
330 pub lgr_non_hierarchical: Option<i32>,
331}