use serde::{Deserialize, Serialize};
use super::serde_helpers::{deserialize_i32, deserialize_optional_i32};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrystalClass {
#[serde(deserialize_with = "deserialize_i32")]
pub id: i32,
#[serde(default)]
pub system: Option<String>,
#[serde(default)]
pub symbol: Option<String>,
#[serde(default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpaceGroup {
#[serde(deserialize_with = "deserialize_i32")]
pub id: i32,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub cclass: Option<i32>,
#[serde(default)]
pub sgtext: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpaceGroupSet {
#[serde(deserialize_with = "deserialize_i32")]
pub id: i32,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub spacegroup: Option<i32>,
#[serde(default, deserialize_with = "deserialize_optional_i32")]
pub cclass: Option<i32>,
#[serde(default)]
pub sgstext: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct CrystalClassesQuery {
pub system: Option<String>,
pub symbol: Option<String>,
pub id_in: Option<Vec<i32>>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl CrystalClassesQuery {
pub fn new() -> Self {
Self::default()
}
pub fn system(mut self, system: impl Into<String>) -> Self {
self.system = Some(system.into());
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
}
}
#[derive(Debug, Clone, Default)]
pub struct SpaceGroupsQuery {
pub cclass: Option<i32>,
pub sgtext: Option<String>,
pub id_in: Option<Vec<i32>>,
pub page: Option<i32>,
pub page_size: Option<i32>,
}
impl SpaceGroupsQuery {
pub fn new() -> Self {
Self::default()
}
pub fn crystal_class(mut self, cclass: i32) -> Self {
self.cclass = Some(cclass);
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
}
}