1#[derive(Debug, Deserialize, Serialize)]
2#[serde(deny_unknown_fields)]
3pub struct SystemDef {
4 pub beam: BeamDef,
5 pub elements: Vec<ElemDef>,
6}
7
8#[derive(Debug, Deserialize, Serialize)]
9pub struct BeamDef {
10 pub polarization: PolType,
11 pub angle: Option<f64>,
12 pub angle_units: Option<AngleType>,
13 pub x_mag: Option<f64>,
14 pub x_phase: Option<f64>,
15 pub y_mag: Option<f64>,
16 pub y_phase: Option<f64>,
17 pub phase_units: Option<AngleType>,
18 pub handedness: Option<HandednessType>,
19}
20
21#[derive(Debug, Deserialize, Serialize)]
22pub struct ElemDef {
23 pub element_type: ElemType,
24 pub phase: Option<f64>,
25 pub phase_units: Option<AngleType>,
26 pub angle: Option<f64>,
27 pub angle_units: Option<AngleType>,
28}
29
30#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq)]
31#[serde(rename_all = "lowercase")]
32pub enum ElemType {
33 Polarizer,
34 Rotator,
35 Retarder,
36 HWP,
37 QWP,
38}
39
40#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq)]
41#[serde(rename_all = "lowercase")]
42pub enum PolType {
43 Linear,
44 Circular,
45 Elliptical,
46}
47
48#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq)]
49#[serde(rename_all = "lowercase")]
50pub enum AngleType {
51 Degrees,
52 Radians,
53}
54
55#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq)]
56#[serde(rename_all = "lowercase")]
57pub enum HandednessType {
58 Left,
59 Right,
60}