1use serde::{Deserialize, Serialize};
4
5#[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#[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#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
37pub enum Diapheny {
38 Transparent,
39 Translucent,
40 Opaque,
41}
42
43#[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#[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#[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#[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#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
140pub enum OpticalType {
141 Isotropic,
142 Uniaxial,
143 Biaxial,
144}
145
146#[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#[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#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
171pub enum OpticalTropic {
172 Isotropic,
173 Anisotropic,
174}
175
176#[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#[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#[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#[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}