castep_param_io/param/units/
time_unit.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5use crate::param::KeywordDisplay;
6
7#[derive(
8    Debug, Clone, Copy, Serialize, Deserialize, Hash, PartialEq, Eq, PartialOrd, Ord, Default,
9)]
10/// This keyword specifies the units in which time will be reported.
11/// # Example
12/// `TIME_UNIT : aut`
13pub enum TimeUnit {
14    AtomicUnitOfTime,
15    Second,
16    Millisecond,
17    Microsecond,
18    Nanosecond,
19    #[default]
20    Picosecond,
21    Femtosecond,
22}
23
24impl Display for TimeUnit {
25    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
26        match self {
27            TimeUnit::AtomicUnitOfTime => f.write_str("aut"),
28            TimeUnit::Second => f.write_str("s"),
29            TimeUnit::Millisecond => f.write_str("ms"),
30            TimeUnit::Microsecond => f.write_str("mus"),
31            TimeUnit::Nanosecond => f.write_str("ns"),
32            TimeUnit::Picosecond => f.write_str("ps"),
33            TimeUnit::Femtosecond => f.write_str("fs"),
34        }
35    }
36}
37
38impl KeywordDisplay for TimeUnit {
39    fn field(&self) -> String {
40        "TIME_UNIT".to_string()
41    }
42}