castep_param_io/param/general/
calculate_props.rs

1use crate::param::KeywordDisplay;
2
3use castep_param_derive::{KeywordDisplay, ParamDisplay};
4use derive_builder::Builder;
5use serde::{Deserialize, Serialize};
6
7#[derive(
8    Debug,
9    Clone,
10    Copy,
11    PartialEq,
12    Eq,
13    PartialOrd,
14    Ord,
15    Hash,
16    Serialize,
17    Deserialize,
18    Default,
19    Builder,
20    ParamDisplay,
21)]
22#[builder(setter(into, strip_option), default)]
23pub struct CalculateProperties {
24    pub stress: Option<CalculateStress>,
25    pub densdiff: Option<CalculateDensdiff>,
26    pub elf: Option<CalculateELF>,
27    pub hirshfeld: Option<CalculateHirshfeld>,
28}
29
30#[derive(
31    Debug,
32    Clone,
33    Copy,
34    PartialEq,
35    Eq,
36    PartialOrd,
37    Ord,
38    Hash,
39    Serialize,
40    Deserialize,
41    Default,
42    KeywordDisplay,
43)]
44#[keyword_display(field="CALCULATE_STRESS",from=bool,value=bool)]
45pub struct CalculateStress(bool);
46#[derive(
47    Debug,
48    Clone,
49    Copy,
50    PartialEq,
51    Eq,
52    PartialOrd,
53    Ord,
54    Hash,
55    Serialize,
56    Deserialize,
57    Default,
58    KeywordDisplay,
59)]
60#[keyword_display(field="CALCULATE_DENSDIFF",from=bool,value=bool)]
61pub struct CalculateDensdiff(bool);
62#[derive(
63    Debug,
64    Clone,
65    Copy,
66    PartialEq,
67    Eq,
68    PartialOrd,
69    Ord,
70    Hash,
71    Serialize,
72    Deserialize,
73    Default,
74    KeywordDisplay,
75)]
76#[keyword_display(field="CALCULATE_ELF",from=bool,value=bool)]
77pub struct CalculateELF(bool);
78#[derive(
79    Debug,
80    Clone,
81    Copy,
82    PartialEq,
83    Eq,
84    PartialOrd,
85    Ord,
86    Hash,
87    Serialize,
88    Deserialize,
89    Default,
90    KeywordDisplay,
91)]
92#[keyword_display(field="CALCULATE_HIRSHFELD", from=bool, value=bool)]
93pub struct CalculateHirshfeld(bool);
94
95#[cfg(test)]
96mod test {
97    use crate::param::general::calculate_props::CalculatePropertiesBuilder;
98
99    use super::CalculateProperties;
100
101    #[test]
102    fn calc_props() {
103        let p = CalculateProperties::default();
104        assert!(p.to_string().is_empty());
105        let p = CalculatePropertiesBuilder::default()
106            .densdiff(true)
107            .stress(false)
108            .build()
109            .unwrap();
110        let target = "CALCULATE_STRESS : false\nCALCULATE_DENSDIFF : true";
111        assert_eq!(target, p.to_string());
112    }
113}