Skip to main content

castep_cell_io/param/general/
print_memory_usage.rs

1use castep_cell_fmt::{Cell, CellValue, ToCell, ToCellValue, CResult};
2use castep_cell_fmt::parse::FromKeyValue;
3use castep_cell_fmt::query::value_as_bool;
4
5/// Specifies whether CASTEP should print memory estimates during the run.
6///
7/// Keyword type: Logical
8///
9/// Default: TRUE
10///
11/// Example:
12/// PRINT_MEMORY_USAGE : FALSE
13#[derive(Debug, Clone, Copy, PartialEq, Eq)]
14pub struct PrintMemoryUsage(pub bool);
15
16impl Default for PrintMemoryUsage {
17    fn default() -> Self {
18        Self(true) // Default is TRUE
19    }
20}
21
22impl FromKeyValue for PrintMemoryUsage {
23    const KEY_NAME: &'static str = "PRINT_MEMORY_USAGE";
24
25    fn from_cell_value_kv(value: &CellValue<'_>) -> CResult<Self> {
26        Ok(Self(value_as_bool(value)?))
27    }
28}
29
30impl ToCell for PrintMemoryUsage {
31    fn to_cell(&self) -> Cell<'_> {
32        Cell::KeyValue("PRINT_MEMORY_USAGE", CellValue::Bool(self.0))
33    }
34}
35
36impl ToCellValue for PrintMemoryUsage {
37    fn to_cell_value(&self) -> CellValue<'_> {
38        CellValue::Bool(self.0)
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_from_cell_value_true() {
48        let val = CellValue::Bool(true);
49        assert_eq!(PrintMemoryUsage::from_cell_value_kv(&val).unwrap().0, true);
50    }
51
52    #[test]
53    fn test_from_cell_value_false() {
54        let val = CellValue::Bool(false);
55        assert_eq!(PrintMemoryUsage::from_cell_value_kv(&val).unwrap().0, false);
56    }
57
58    #[test]
59    fn test_key_name() {
60        assert_eq!(PrintMemoryUsage::KEY_NAME, "PRINT_MEMORY_USAGE");
61    }
62}
63