mindat_rs/models/
crystallography.rs1use serde::{Deserialize, Serialize};
5
6use super::serde_helpers::{deserialize_i32, deserialize_optional_i32};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct CrystalClass {
11 #[serde(deserialize_with = "deserialize_i32")]
13 pub id: i32,
14 #[serde(default)]
16 pub system: Option<String>,
17 #[serde(default)]
19 pub symbol: Option<String>,
20 #[serde(default)]
22 pub name: Option<String>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct SpaceGroup {
28 #[serde(deserialize_with = "deserialize_i32")]
30 pub id: i32,
31 #[serde(default, deserialize_with = "deserialize_optional_i32")]
33 pub cclass: Option<i32>,
34 #[serde(default)]
36 pub sgtext: Option<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct SpaceGroupSet {
42 #[serde(deserialize_with = "deserialize_i32")]
44 pub id: i32,
45 #[serde(default, deserialize_with = "deserialize_optional_i32")]
47 pub spacegroup: Option<i32>,
48 #[serde(default, deserialize_with = "deserialize_optional_i32")]
50 pub cclass: Option<i32>,
51 #[serde(default)]
53 pub sgstext: Option<String>,
54}
55
56#[derive(Debug, Clone, Default)]
58pub struct CrystalClassesQuery {
59 pub system: Option<String>,
61 pub symbol: Option<String>,
63 pub id_in: Option<Vec<i32>>,
65 pub page: Option<i32>,
67 pub page_size: Option<i32>,
69}
70
71impl CrystalClassesQuery {
72 pub fn new() -> Self {
74 Self::default()
75 }
76
77 pub fn system(mut self, system: impl Into<String>) -> Self {
79 self.system = Some(system.into());
80 self
81 }
82
83 pub fn page(mut self, page: i32) -> Self {
85 self.page = Some(page);
86 self
87 }
88
89 pub fn page_size(mut self, size: i32) -> Self {
91 self.page_size = Some(size);
92 self
93 }
94}
95
96#[derive(Debug, Clone, Default)]
98pub struct SpaceGroupsQuery {
99 pub cclass: Option<i32>,
101 pub sgtext: Option<String>,
103 pub id_in: Option<Vec<i32>>,
105 pub page: Option<i32>,
107 pub page_size: Option<i32>,
109}
110
111impl SpaceGroupsQuery {
112 pub fn new() -> Self {
114 Self::default()
115 }
116
117 pub fn crystal_class(mut self, cclass: i32) -> Self {
119 self.cclass = Some(cclass);
120 self
121 }
122
123 pub fn page(mut self, page: i32) -> Self {
125 self.page = Some(page);
126 self
127 }
128
129 pub fn page_size(mut self, size: i32) -> Self {
131 self.page_size = Some(size);
132 self
133 }
134}