castep_param_io/param/electronic/
mod.rs1use castep_param_derive::ParamDisplay;
2use derive_builder::Builder;
3use serde::{Deserialize, Serialize};
4
5pub use bands_option::*;
6pub use charge::Charge;
7pub use nelectrons::{NDown, NElectrons, NUp};
8pub use spin::Spin;
9
10use crate::param::KeywordDisplay;
11
12mod bands_option;
13mod charge;
14mod nelectrons;
15mod spin;
16
17#[derive(
18 Debug,
19 Clone,
20 Copy,
21 Serialize,
22 Deserialize,
23 Default,
24 Builder,
25 ParamDisplay,
26 PartialEq,
27 PartialOrd,
28)]
29#[non_exhaustive]
30#[builder(setter(into, strip_option), default)]
31pub struct ElectronicParam {
33 pub charge: Option<Charge>,
34 #[param_display(display=to_string())]
35 pub bands_option: Option<BandsOption>,
36 pub nelectrons: Option<NElectrons>,
37 pub nup: Option<NUp>,
38 pub ndown: Option<NDown>,
39 pub spin: Option<Spin>, }
51
52#[cfg(test)]
53mod test {
54 use super::{
55 bands_option::{BandsOptionBuilder, ExtraBands},
56 ElectronicParamBuilder,
57 };
58
59 #[test]
60 fn electronic_param() {
61 let elec_param = ElectronicParamBuilder::default()
62 .spin_polarised(true)
63 .spin(2.0)
64 .bands_option(
65 BandsOptionBuilder::default()
66 .extra_bands(ExtraBands::PercExtraBands(72.0))
67 .build()
68 .unwrap(),
69 )
70 .build()
71 .unwrap();
72 println!("{}", elec_param);
73 }
74}