castep_param_io/param/
mod.rs1#![allow(dead_code)]
2use std::fmt::Display;
3
4use band_structure::BandStructure;
5use castep_param_derive::ParamDisplay;
6
7mod band_structure;
8mod basis_set;
9mod density_mixing_params;
10mod electro_min;
11mod electronic;
12mod general;
13mod geom_opt;
14mod population_analysis;
15mod pseudopotentials;
16#[cfg(feature = "template")]
17mod template;
18mod units;
19mod xc_correlation;
20
21pub use basis_set::*;
22pub use density_mixing_params::*;
23pub use electro_min::*;
24pub use electronic::*;
25pub use general::*;
26pub use geom_opt::*;
27pub use population_analysis::*;
28pub use pseudopotentials::*;
29pub use units::*;
30pub use xc_correlation::*;
31
32#[derive(
33 Debug, Clone, PartialEq, PartialOrd, Serialize, Deserialize, ParamDisplay, Builder, Default,
34)]
35#[param_display(use_display = true)]
36#[builder(setter(strip_option), default)]
37pub struct CastepParam {
38 #[param_display(use_ref = true)]
39 pub general_keywords: Option<General>,
40 pub units: Option<Units>,
41 pub pseudopotentials: Option<Pseudopotentials>,
42 pub band_structure: Option<BandStructure>,
43 pub basis_set: Option<BasisSet>,
44 pub electronic: Option<ElectronicParam>,
45 #[param_display(use_ref = true)]
46 pub electro_min: Option<ElectroMinimization>,
47 pub density_mixing: Option<DensityMixingParams>,
48 pub population_analysis: Option<PopulationAnalysis>,
49 pub geom_opt: Option<GeomOpt>,
50 #[param_display(use_ref = true)]
51 pub xc_correlation: Option<XcParam>,
52}
53
54pub trait KeywordDisplay: Display {
55 fn field(&self) -> String;
56 fn output(&self) -> String {
57 format!("{} : {}", self.field(), self)
58 }
59}