parse_monitors/
cfd.rs

1/*!
2# CFD database model based on Rust types
3
4## Examples
5
6Iterator that iterates over all the [CfdCase]s of CFD [Baseline] 2021
7```
8use parse_monitors::cfd;
9let cfd_cases_iter = cfd::Baseline::<2021>::default().into_iter();
10```
11*/
12
13mod baseline;
14mod cfd_case;
15#[cfg(feature = "2020")]
16mod y2020;
17#[cfg(feature = "2021")]
18mod y2021;
19#[cfg(feature = "2025")]
20mod y2025;
21pub use baseline::{Baseline, BaselineError, BaselineTrait};
22pub use cfd_case::{Azimuth, CfdCase, CfdCaseError, Enclosure, WindSpeed, ZenithAngle};
23
24#[derive(thiserror::Error, Debug)]
25pub enum CfdError {
26    #[error("Failed to read CFD data file")]
27    ReadDataFile(#[from] glob::GlobError),
28    #[error("Data file not recognized")]
29    DataFileGlob(#[from] glob::PatternError),
30    #[error("{0} data not available")]
31    DataFile(String),
32    #[error("CFD baseline error")]
33    Baseline(#[from] BaselineError),
34}
35
36/// Data file collections available in the CFD database
37#[derive(Debug)]
38pub enum CfdDataFile<const YEAR: u32> {
39    M1Pressure,
40    M2Pressure,
41    TemperatureField,
42    OpticalPathDifference,
43    TelescopePressure,
44}