use serde::{Deserialize, Serialize};
use super::common::{MinStats, Relation};
use super::enums::*;
use super::serde_helpers::{
deserialize_optional_f64, deserialize_optional_i32, deserialize_optional_u32,
deserialize_optional_vec, deserialize_optional_vec_i32, deserialize_optional_vec_string,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Geomaterial {
pub id: i32,
#[serde(default)]
pub longid: Option<String>,
#[serde(default)]
pub guid: Option<String>,
pub name: Option<String>,
#[serde(default)]
pub updttime: Option<String>,
#[serde(default)]
pub mindat_formula: Option<String>,
#[serde(default)]
pub mindat_formula_note: Option<String>,
#[serde(default)]
pub ima_formula: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_vec_string")]
pub ima_status: Option<Vec<String>>,
#[serde(default, deserialize_with = "deserialize_optional_vec_string")]
pub ima_notes: Option<Vec<String>>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub varietyof: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub synid: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub polytypeof: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub groupid: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub entrytype: Option<i32>,
#[serde(default)]
pub entrytype_text: Option<String>,
#[serde(default)]
pub description_short: Option<String>,
#[serde(default)]
pub impurities: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_vec_string")]
pub elements: Option<Vec<String>>,
#[serde(default, deserialize_with = "deserialize_optional_vec_string")]
pub sigelements: Option<Vec<String>>,
#[serde(default, deserialize_with = "deserialize_optional_vec_string")]
pub key_elements: Option<Vec<String>>,
#[serde(default)]
pub tlform: Option<String>,
#[serde(default)]
pub cim: Option<String>,
#[serde(default)]
pub occurrence: Option<String>,
#[serde(default)]
pub otheroccurrence: Option<String>,
#[serde(default)]
pub industrial: Option<String>,
#[serde(default)]
pub discovery_year: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_u32")]
pub approval_year: Option<u32>,
#[serde(default, deserialize_with = "deserialize_optional_u32")]
pub publication_year: Option<u32>,
#[serde(default)]
pub ima_history: Option<String>,
#[serde(default)]
pub diapheny: Option<String>,
#[serde(default)]
pub cleavage: Option<String>,
#[serde(default)]
pub cleavagetype: Option<String>,
#[serde(default)]
pub parting: Option<String>,
#[serde(default)]
pub tenacity: Option<String>,
#[serde(default)]
pub colour: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub csmetamict: Option<i32>,
#[serde(default)]
pub opticalextinction: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub hmin: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub hmax: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub hardtype: Option<i32>,
#[serde(default)]
pub vhnmin: Option<String>,
#[serde(default)]
pub vhnmax: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub vhnerror: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub vhng: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub vhns: Option<i32>,
#[serde(default)]
pub luminescence: Option<String>,
#[serde(default)]
pub lustre: Option<String>,
#[serde(default)]
pub lustretype: Option<String>,
#[serde(default)]
pub aboutname: Option<String>,
#[serde(default)]
pub other: Option<String>,
#[serde(default)]
pub streak: Option<String>,
#[serde(default)]
pub csystem: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub cclass: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub spacegroup: Option<i32>,
#[serde(default)]
pub spacegroupset: Option<String>,
#[serde(default)]
pub a: Option<String>,
#[serde(default)]
pub b: Option<String>,
#[serde(default)]
pub c: Option<String>,
#[serde(default)]
pub alpha: Option<String>,
#[serde(default)]
pub beta: Option<String>,
#[serde(default)]
pub gamma: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub va3: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub z: Option<i32>,
#[serde(default)]
pub dmeas: Option<String>,
#[serde(default)]
pub dmeas2: Option<String>,
#[serde(default)]
pub dcalc: Option<String>,
#[serde(default)]
pub fracturetype: Option<String>,
#[serde(default)]
pub morphology: Option<String>,
#[serde(default)]
pub twinning: Option<String>,
#[serde(default)]
pub epitaxidescription: Option<String>,
#[serde(default)]
pub opticaltype: Option<String>,
#[serde(default)]
pub opticalsign: Option<String>,
#[serde(default)]
pub opticalalpha: Option<String>,
#[serde(default)]
pub opticalbeta: Option<String>,
#[serde(default)]
pub opticalgamma: Option<String>,
#[serde(default)]
pub opticalomega: Option<String>,
#[serde(default)]
pub opticalepsilon: Option<String>,
#[serde(default)]
pub opticaln: Option<String>,
#[serde(default)]
pub optical2vcalc: Option<String>,
#[serde(default)]
pub optical2vmeasured: Option<String>,
#[serde(default)]
pub opticaldispersion: Option<String>,
#[serde(default)]
pub opticalpleochroism: Option<String>,
#[serde(default)]
pub opticalpleochorismdesc: Option<String>,
#[serde(default)]
pub opticalbirefringence: Option<String>,
#[serde(default)]
pub opticalcomments: Option<String>,
#[serde(default)]
pub opticalcolour: Option<String>,
#[serde(default)]
pub opticalinternal: Option<String>,
#[serde(default)]
pub opticaltropic: Option<String>,
#[serde(default)]
pub opticalanisotropism: Option<String>,
#[serde(default)]
pub opticalbireflectance: Option<String>,
#[serde(default)]
pub opticalr: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub rimin: Option<f64>,
#[serde(default, deserialize_with = "deserialize_optional_f64")]
pub rimax: Option<f64>,
#[serde(default)]
pub uv: Option<String>,
#[serde(default)]
pub ir: Option<String>,
#[serde(default)]
pub magnetism: Option<String>,
#[serde(default)]
pub type_specimen_store: Option<String>,
#[serde(default)]
pub shortcode_ima: Option<String>,
#[serde(default)]
pub strunz10ed1: Option<String>,
#[serde(default)]
pub strunz10ed2: Option<String>,
#[serde(default)]
pub strunz10ed3: Option<String>,
#[serde(default)]
pub strunz10ed4: Option<String>,
#[serde(default)]
pub dana8ed1: Option<String>,
#[serde(default)]
pub dana8ed2: Option<String>,
#[serde(default)]
pub dana8ed3: Option<String>,
#[serde(default)]
pub dana8ed4: Option<String>,
#[serde(default)]
pub thermalbehaviour: Option<String>,
#[serde(default)]
pub electrical: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub rock_parent: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub rock_parent2: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub rock_root: Option<i32>,
#[serde(default)]
pub rock_bgs_code: Option<String>,
#[serde(default)]
pub meteoritical_code: Option<String>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub weighting: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_vec")]
pub relations: Option<Vec<Relation>>,
#[serde(default)]
pub minstats: Option<MinStats>,
#[serde(default, deserialize_with = "deserialize_optional_vec_i32")]
pub locality: Option<Vec<i32>>,
#[serde(default, deserialize_with = "deserialize_optional_vec_i32")]
pub type_localities: Option<Vec<i32>>,
}
#[derive(Debug, Clone, Default)]
pub struct GeomaterialsQuery {
pub name: Option<String>,
pub q: Option<String>,
pub ima: Option<bool>,
pub ima_status: Option<Vec<ImaStatus>>,
pub ima_notes: Option<Vec<ImaNotes>>,
pub entrytype: Option<Vec<u8>>,
pub elements_inc: Option<String>,
pub elements_exc: Option<String>,
pub el_essential: Option<String>,
pub crystal_system: Option<Vec<CrystalSystem>>,
pub cleavagetype: Option<Vec<CleavageType>>,
pub fracturetype: Option<Vec<FractureType>>,
pub lustretype: Option<Vec<LustreType>>,
pub diapheny: Option<Vec<Diapheny>>,
pub tenacity: Option<Vec<Tenacity>>,
pub colour: Option<String>,
pub streak: Option<String>,
pub opticaltype: Option<OpticalType>,
pub opticalsign: Option<OpticalSign>,
pub hardness_min: Option<f32>,
pub hardness_max: Option<f32>,
pub density_min: Option<f64>,
pub density_max: Option<f64>,
pub ri_min: Option<f32>,
pub ri_max: Option<f32>,
pub bi_min: Option<String>,
pub bi_max: Option<String>,
pub optical2v_min: Option<String>,
pub optical2v_max: Option<String>,
pub varietyof: Option<i32>,
pub synid: Option<i32>,
pub polytypeof: Option<i32>,
pub groupid: Option<i32>,
pub id_in: Option<Vec<i32>>,
pub id_min: Option<i32>,
pub id_max: Option<i32>,
pub non_utf: Option<bool>,
pub meteoritical_code: Option<String>,
pub meteoritical_code_exists: Option<bool>,
pub updated_at: Option<String>,
pub fields: Option<String>,
pub omit: Option<String>,
pub expand: Option<Vec<String>>,
pub ordering: Option<GeomaterialsOrdering>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl GeomaterialsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn search(mut self, q: impl Into<String>) -> Self {
self.q = Some(q.into());
self
}
pub fn ima_approved(mut self, approved: bool) -> Self {
self.ima = Some(approved);
self
}
pub fn entry_types(mut self, types: Vec<u8>) -> Self {
self.entrytype = Some(types);
self
}
pub fn with_elements(mut self, elements: impl Into<String>) -> Self {
self.elements_inc = Some(elements.into());
self
}
pub fn without_elements(mut self, elements: impl Into<String>) -> Self {
self.elements_exc = Some(elements.into());
self
}
pub fn essential_elements(mut self, elements: impl Into<String>) -> Self {
self.el_essential = Some(elements.into());
self
}
pub fn ids(mut self, ids: Vec<i32>) -> Self {
self.id_in = Some(ids);
self
}
pub fn id_range(mut self, min: i32, max: i32) -> Self {
self.id_min = Some(min);
self.id_max = Some(max);
self
}
pub fn crystal_systems(mut self, systems: Vec<CrystalSystem>) -> Self {
self.crystal_system = Some(systems);
self
}
pub fn hardness_range(mut self, min: f32, max: f32) -> Self {
self.hardness_min = Some(min);
self.hardness_max = Some(max);
self
}
pub fn density_range(mut self, min: f64, max: f64) -> Self {
self.density_min = Some(min);
self.density_max = Some(max);
self
}
pub fn select_fields(mut self, fields: impl Into<String>) -> Self {
self.fields = Some(fields.into());
self
}
pub fn omit_fields(mut self, fields: impl Into<String>) -> Self {
self.omit = Some(fields.into());
self
}
pub fn expand_fields(mut self, fields: Vec<String>) -> Self {
self.expand = Some(fields);
self
}
pub fn order_by(mut self, ordering: GeomaterialsOrdering) -> Self {
self.ordering = Some(ordering);
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
}
}