castep_param_io/param/
mod.rs

1#![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}