mindat_rs/models/
enums.rs

1//! Enumeration types used throughout the API.
2
3use serde::{Deserialize, Serialize};
4
5/// Crystal system classification.
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub enum CrystalSystem {
8    Isometric,
9    Orthorhombic,
10    Hexagonal,
11    Trigonal,
12    Tetragonal,
13    Monoclinic,
14    Triclinic,
15    Amorphous,
16    Icosahedral,
17}
18
19/// Cleavage type classification.
20#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21pub enum CleavageType {
22    #[serde(rename = "None Observed")]
23    NoneObserved,
24    #[serde(rename = "Poor/Indistinct")]
25    PoorIndistinct,
26    #[serde(rename = "Imperfect/Fair")]
27    ImperfectFair,
28    #[serde(rename = "Distinct/Good")]
29    DistinctGood,
30    #[serde(rename = "Very Good")]
31    VeryGood,
32    Perfect,
33}
34
35/// Transparency classification.
36#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
37pub enum Diapheny {
38    Transparent,
39    Translucent,
40    Opaque,
41}
42
43/// Entry type classification for geomaterials.
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
45#[repr(u8)]
46pub enum EntryType {
47    #[serde(rename = "0")]
48    Mineral = 0,
49    #[serde(rename = "1")]
50    Synonym = 1,
51    #[serde(rename = "2")]
52    Variety = 2,
53    #[serde(rename = "3")]
54    Mixture = 3,
55    #[serde(rename = "4")]
56    Series = 4,
57    #[serde(rename = "5")]
58    GroupList = 5,
59    #[serde(rename = "6")]
60    Polytype = 6,
61    #[serde(rename = "7")]
62    Rock = 7,
63    #[serde(rename = "8")]
64    Commodity = 8,
65}
66
67impl From<u8> for EntryType {
68    fn from(value: u8) -> Self {
69        match value {
70            0 => EntryType::Mineral,
71            1 => EntryType::Synonym,
72            2 => EntryType::Variety,
73            3 => EntryType::Mixture,
74            4 => EntryType::Series,
75            5 => EntryType::GroupList,
76            6 => EntryType::Polytype,
77            7 => EntryType::Rock,
78            8 => EntryType::Commodity,
79            _ => EntryType::Mineral,
80        }
81    }
82}
83
84/// Fracture type classification.
85#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86pub enum FractureType {
87    #[serde(rename = "None observed")]
88    NoneObserved,
89    #[serde(rename = "Irregular/Uneven")]
90    IrregularUneven,
91    Splintery,
92    Hackly,
93    Conchoidal,
94    #[serde(rename = "Sub-Conchoidal")]
95    SubConchoidal,
96    Fibrous,
97    Micaceous,
98    #[serde(rename = "Step-Like")]
99    StepLike,
100}
101
102/// Lustre type classification.
103#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
104pub enum LustreType {
105    Adamantine,
106    #[serde(rename = "Sub-Adamantine")]
107    SubAdamantine,
108    Vitreous,
109    #[serde(rename = "Sub-Vitreous")]
110    SubVitreous,
111    Resinous,
112    Waxy,
113    Greasy,
114    Silky,
115    Pearly,
116    Metallic,
117    #[serde(rename = "Sub-Metallic")]
118    SubMetallic,
119    Dull,
120    Earthy,
121}
122
123/// Tenacity classification.
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125#[serde(rename_all = "lowercase")]
126pub enum Tenacity {
127    Brittle,
128    #[serde(rename = "very brittle")]
129    VeryBrittle,
130    Sectile,
131    Waxy,
132    Flexible,
133    Elastic,
134    Fragile,
135    Malleable,
136}
137
138/// Optical type classification.
139#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
140pub enum OpticalType {
141    Isotropic,
142    Uniaxial,
143    Biaxial,
144}
145
146/// Optical sign classification.
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
148pub enum OpticalSign {
149    #[serde(rename = "+")]
150    Positive,
151    #[serde(rename = "-")]
152    Negative,
153    #[serde(rename = "+/-")]
154    Both,
155}
156
157/// Optical pleochroism classification.
158#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
159pub enum OpticalPleochroism {
160    #[serde(rename = "Non-pleochroic")]
161    NonPleochroic,
162    #[serde(rename = "Not Visible")]
163    NotVisible,
164    Weak,
165    Visible,
166    Strong,
167}
168
169/// Optical tropic classification.
170#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
171pub enum OpticalTropic {
172    Isotropic,
173    Anisotropic,
174}
175
176/// Magnetism classification.
177#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
178pub enum Magnetism {
179    #[serde(rename = "Non-Magnetic")]
180    NonMagnetic,
181    Diamagnetic,
182    Paramagnetic,
183    Ferromagnetic,
184    Antiferromagnetic,
185    Ferrimagnetic,
186}
187
188/// IMA status for minerals.
189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
190#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
191pub enum ImaStatus {
192    Approved,
193    Discredited,
194    PendingPublication,
195    Grandfathered,
196    Questionable,
197}
198
199/// IMA notes for minerals.
200#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
201#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
202pub enum ImaNotes {
203    Rejected,
204    PendingApproval,
205    Group,
206    Redefined,
207    Renamed,
208    Intermediate,
209    PublishedWithoutApproval,
210    UnnamedValid,
211    UnnamedInvalid,
212    NamedAmphibole,
213}
214
215/// Ordering options for geomaterials queries.
216#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
217pub enum GeomaterialsOrdering {
218    #[serde(rename = "id")]
219    Id,
220    #[serde(rename = "-id")]
221    IdDesc,
222    #[serde(rename = "name")]
223    Name,
224    #[serde(rename = "-name")]
225    NameDesc,
226    #[serde(rename = "updttime")]
227    UpdateTime,
228    #[serde(rename = "-updttime")]
229    UpdateTimeDesc,
230    #[serde(rename = "approval_year")]
231    ApprovalYear,
232    #[serde(rename = "-approval_year")]
233    ApprovalYearDesc,
234    #[serde(rename = "weighting")]
235    Weighting,
236    #[serde(rename = "-weighting")]
237    WeightingDesc,
238    #[serde(rename = "minstats__ms_locentries")]
239    LocalityEntries,
240    #[serde(rename = "-minstats__ms_locentries")]
241    LocalityEntriesDesc,
242    #[serde(rename = "minstats__ms_photos")]
243    Photos,
244    #[serde(rename = "-minstats__ms_photos")]
245    PhotosDesc,
246}
247
248impl std::fmt::Display for GeomaterialsOrdering {
249    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
250        let s = match self {
251            Self::Id => "id",
252            Self::IdDesc => "-id",
253            Self::Name => "name",
254            Self::NameDesc => "-name",
255            Self::UpdateTime => "updttime",
256            Self::UpdateTimeDesc => "-updttime",
257            Self::ApprovalYear => "approval_year",
258            Self::ApprovalYearDesc => "-approval_year",
259            Self::Weighting => "weighting",
260            Self::WeightingDesc => "-weighting",
261            Self::LocalityEntries => "minstats__ms_locentries",
262            Self::LocalityEntriesDesc => "-minstats__ms_locentries",
263            Self::Photos => "minstats__ms_photos",
264            Self::PhotosDesc => "-minstats__ms_photos",
265        };
266        write!(f, "{}", s)
267    }
268}