1use 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 Reference {
14 #[serde(deserialize_with = "deserialize_i64")]
16 pub ref_id: i64,
17 #[serde(default, deserialize_with = "deserialize_optional_i64")]
19 pub ref_his_id: Option<i64>,
20 #[serde(default)]
22 pub ref_entrydate: Option<String>,
23 #[serde(default)]
25 pub ref_editdate: Option<String>,
26 #[serde(default)]
28 pub ref_rawtext: Option<String>,
29 #[serde(default)]
31 pub ref_htmltext: Option<String>,
32 #[serde(default, deserialize_with = "deserialize_optional_i32")]
34 pub ref_type: Option<i32>,
35 #[serde(default, deserialize_with = "deserialize_optional_i32")]
37 pub ref_access: Option<i32>,
38 #[serde(default)]
40 pub ref_title: Option<String>,
41 #[serde(default)]
43 pub ref_journal: Option<String>,
44 #[serde(default, deserialize_with = "deserialize_optional_i32")]
46 pub ref_year: Option<i32>,
47 #[serde(default, deserialize_with = "deserialize_optional_i32")]
49 pub ref_year_to: Option<i32>,
50 #[serde(default, deserialize_with = "deserialize_optional_i32")]
52 pub ref_month: Option<i32>,
53 #[serde(default, deserialize_with = "deserialize_optional_i32")]
55 pub ref_day: Option<i32>,
56 #[serde(default, deserialize_with = "deserialize_optional_i32")]
58 pub ref_series: Option<i32>,
59 #[serde(default)]
61 pub ref_volume: Option<String>,
62 #[serde(default, deserialize_with = "deserialize_optional_i32")]
64 pub ref_volume_int: Option<i32>,
65 #[serde(default)]
67 pub ref_issue: Option<String>,
68 #[serde(default, deserialize_with = "deserialize_optional_i32")]
70 pub ref_issue_int: Option<i32>,
71 #[serde(default, deserialize_with = "deserialize_optional_i32")]
73 pub ref_pagefrom: Option<i32>,
74 #[serde(default, deserialize_with = "deserialize_optional_i32")]
76 pub ref_pageto: Option<i32>,
77 #[serde(default)]
79 pub ref_pagefrom_txt: Option<String>,
80 #[serde(default)]
82 pub ref_pageto_txt: Option<String>,
83 #[serde(default)]
85 pub ref_publisher: Option<String>,
86 #[serde(default)]
88 pub ref_place: Option<String>,
89 #[serde(default)]
91 pub ref_url: Option<String>,
92 #[serde(default)]
94 pub ref_file_url: Option<String>,
95 #[serde(default)]
97 pub ref_doi: Option<String>,
98 #[serde(default)]
100 pub ref_other_fields: Option<String>,
101 #[serde(default)]
103 pub ref_notes: Option<String>,
104 #[serde(default, deserialize_with = "deserialize_optional_i32")]
106 pub ref_deleted_by: Option<i32>,
107 #[serde(default)]
109 pub ref_issuetitle: Option<String>,
110 #[serde(default, deserialize_with = "deserialize_optional_i32")]
112 pub ref_edition: Option<i32>,
113 #[serde(default, deserialize_with = "deserialize_optional_i64")]
115 pub ref_parent: Option<i64>,
116 #[serde(default, deserialize_with = "deserialize_optional_i32")]
118 pub ref_part: Option<i32>,
119 #[serde(default, deserialize_with = "deserialize_optional_i64")]
121 pub ref_replaced_by: Option<i64>,
122 #[serde(default)]
124 pub ref_isbn: Option<String>,
125 #[serde(default)]
127 pub ref_abstract: Option<String>,
128 #[serde(default)]
130 pub ref_lastautodl: Option<String>,
131 #[serde(default, deserialize_with = "deserialize_optional_i32")]
133 pub ref_toplevel: Option<i32>,
134 #[serde(default)]
136 pub ref_journal_t: Option<String>,
137 #[serde(default)]
139 pub ref_title_t: Option<String>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144pub struct ReferenceAuthor {
145 #[serde(deserialize_with = "deserialize_i64")]
147 pub ra_id: i64,
148 #[serde(default, deserialize_with = "deserialize_optional_i64")]
150 pub ra_ref_id: Option<i64>,
151 #[serde(default)]
153 pub ra_name: Option<String>,
154 #[serde(default)]
156 pub ra_type: Option<serde_json::Value>,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
161pub struct ReferenceAuthorUnique {
162 #[serde(deserialize_with = "deserialize_i64")]
164 pub rau_id: i64,
165 #[serde(default)]
167 pub rau_text: Option<String>,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172pub struct ReferenceCitation {
173 #[serde(deserialize_with = "deserialize_i64")]
175 pub rc_id: i64,
176 #[serde(default, deserialize_with = "deserialize_optional_i64")]
178 pub rc_his_id: Option<i64>,
179 #[serde(default, deserialize_with = "deserialize_optional_i64")]
181 pub rc_ref_id: Option<i64>,
182 #[serde(default, deserialize_with = "deserialize_optional_i64")]
184 pub rc_rp_id: Option<i64>,
185 #[serde(default)]
187 pub rc_date: Option<String>,
188 #[serde(default)]
190 pub rc_date_created: Option<String>,
191 #[serde(default, deserialize_with = "deserialize_optional_i64")]
193 pub rc_min: Option<i64>,
194 #[serde(default, deserialize_with = "deserialize_optional_i64")]
196 pub rc_loc: Option<i64>,
197 #[serde(default, deserialize_with = "deserialize_optional_i64")]
199 pub rc_article: Option<i64>,
200 #[serde(default, deserialize_with = "deserialize_optional_i64")]
202 pub rc_photo: Option<i64>,
203 #[serde(default, deserialize_with = "deserialize_optional_i64")]
205 pub rc_glossary: Option<i64>,
206 #[serde(default, deserialize_with = "deserialize_optional_i64")]
208 pub rc_entryid: Option<i64>,
209 #[serde(default, deserialize_with = "deserialize_optional_i32")]
211 pub rc_pagefrom: Option<i32>,
212 #[serde(default, deserialize_with = "deserialize_optional_i32")]
214 pub rc_pageto: Option<i32>,
215 #[serde(default, deserialize_with = "deserialize_optional_i32")]
217 pub rc_citationno: Option<i32>,
218 #[serde(default)]
220 pub rc_comments: Option<String>,
221 #[serde(default, deserialize_with = "deserialize_optional_i32")]
223 pub rc_deletedby: Option<i32>,
224 #[serde(default)]
226 pub rc_type: Option<serde_json::Value>,
227 #[serde(default, deserialize_with = "deserialize_optional_i64")]
229 pub rc_ukey: Option<i64>,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct ReferenceType {
235 #[serde(deserialize_with = "deserialize_i64")]
237 pub rt_id: i64,
238 #[serde(default)]
240 pub rt_code: Option<String>,
241 #[serde(default)]
243 pub rt_name: Option<String>,
244 #[serde(default, deserialize_with = "deserialize_optional_i32")]
246 pub rt_important: Option<i32>,
247}
248
249#[derive(Debug, Clone, Serialize, Deserialize)]
251pub struct ReferenceLanguage {
252 #[serde(deserialize_with = "deserialize_i64")]
254 pub rl_id: i64,
255 #[serde(default, deserialize_with = "deserialize_optional_i64")]
257 pub rl_ref_id: Option<i64>,
258 #[serde(default)]
260 pub rl_iso: Option<String>,
261 #[serde(default, deserialize_with = "deserialize_optional_i32")]
263 pub rl_minor: Option<i32>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
268pub struct ReferenceClassify {
269 #[serde(deserialize_with = "deserialize_i64")]
271 pub rc_id: i64,
272 #[serde(default, deserialize_with = "deserialize_optional_i64")]
274 pub rc_ref_id: Option<i64>,
275 #[serde(default)]
277 pub rc_type: Option<serde_json::Value>,
278 #[serde(default)]
280 pub rc_value: Option<String>,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
285pub struct ReferenceDdc {
286 #[serde(default)]
288 pub ddc_code: String,
289 #[serde(default)]
291 pub ddc_title: Option<String>,
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
296pub struct ReferenceLcc {
297 #[serde(default)]
299 pub lcc_code: String,
300 #[serde(default)]
302 pub lcc_title: Option<String>,
303}
304
305#[derive(Debug, Clone, Serialize, Deserialize)]
307pub struct ReferenceIsbn {
308 #[serde(default)]
310 pub ri_isbn: String,
311 #[serde(default)]
313 pub ri_series: Option<String>,
314 #[serde(default)]
316 pub ri_publisher: Option<String>,
317 #[serde(default, deserialize_with = "deserialize_optional_i32")]
319 pub ri_year: Option<i32>,
320 #[serde(default)]
322 pub ri_title: Option<String>,
323}
324
325#[derive(Debug, Clone, Serialize, Deserialize)]
327pub struct ReferenceExtra {
328 #[serde(deserialize_with = "deserialize_i64")]
330 pub re_id: i64,
331 #[serde(default)]
333 pub re_code: Option<String>,
334 #[serde(default)]
336 pub re_text: Option<String>,
337}
338
339#[derive(Debug, Clone, Default)]
341pub struct ReferencesQuery {
342 pub q: Option<String>,
344 pub ref_type: Option<i32>,
346 pub ref_title: Option<String>,
348 pub ref_journal: Option<String>,
350 pub ref_publisher: Option<String>,
352 pub ref_doi: Option<String>,
354 pub ref_isbn: Option<String>,
356 pub id_in: Option<Vec<i64>>,
358 pub id_range_min: Option<i64>,
360 pub id_range_max: Option<i64>,
362 pub ordering: Option<String>,
364 pub fields: Option<String>,
366 pub omit: Option<String>,
368 pub page: Option<i32>,
370 pub page_size: Option<i32>,
372}
373
374impl ReferencesQuery {
375 pub fn new() -> Self {
377 Self::default()
378 }
379
380 pub fn search(mut self, q: impl Into<String>) -> Self {
382 self.q = Some(q.into());
383 self
384 }
385
386 pub fn title(mut self, title: impl Into<String>) -> Self {
388 self.ref_title = Some(title.into());
389 self
390 }
391
392 pub fn journal(mut self, journal: impl Into<String>) -> Self {
394 self.ref_journal = Some(journal.into());
395 self
396 }
397
398 pub fn doi(mut self, doi: impl Into<String>) -> Self {
400 self.ref_doi = Some(doi.into());
401 self
402 }
403
404 pub fn ref_type(mut self, ref_type: i32) -> Self {
406 self.ref_type = Some(ref_type);
407 self
408 }
409
410 pub fn page(mut self, page: i32) -> Self {
412 self.page = Some(page);
413 self
414 }
415
416 pub fn page_size(mut self, size: i32) -> Self {
418 self.page_size = Some(size);
419 self
420 }
421}
422
423#[derive(Debug, Clone, Default)]
425pub struct ReferenceCitationsQuery {
426 pub rc_min: Option<i64>,
428 pub rc_loc: Option<i64>,
430 pub rc_photo: Option<i64>,
432 pub rc_article: Option<i64>,
434 pub rc_ref_id: Option<i64>,
436 pub rc_entryid: Option<i64>,
438 pub rc_type: Option<i32>,
440 pub ordering: Option<String>,
442 pub page: Option<i32>,
444 pub page_size: Option<i32>,
446}
447
448impl ReferenceCitationsQuery {
449 pub fn new() -> Self {
451 Self::default()
452 }
453
454 pub fn mineral(mut self, mineral_id: i64) -> Self {
456 self.rc_min = Some(mineral_id);
457 self
458 }
459
460 pub fn locality(mut self, locality_id: i64) -> Self {
462 self.rc_loc = Some(locality_id);
463 self
464 }
465
466 pub fn reference(mut self, ref_id: i64) -> Self {
468 self.rc_ref_id = Some(ref_id);
469 self
470 }
471
472 pub fn page(mut self, page: i32) -> Self {
474 self.page = Some(page);
475 self
476 }
477
478 pub fn page_size(mut self, size: i32) -> Self {
480 self.page_size = Some(size);
481 self
482 }
483}