openfare_lib/lock/plan/conditions/
mod.rs

1use anyhow::Result;
2
3mod common;
4mod current_time;
5mod employees_count;
6
7pub use current_time::CurrentTime;
8pub use employees_count::EmployeesCount;
9
10#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
11pub struct Conditions {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub current_time: Option<CurrentTime>,
14
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub employees_count: Option<EmployeesCount>,
17}
18
19impl Conditions {
20    pub fn evaluate(&self, parameters: &crate::lock::plan::conditions::Parameters) -> Result<bool> {
21        let mut all_conditions_pass = true;
22        if let Some(current_time) = &self.current_time {
23            all_conditions_pass &= current_time.evaluate()?;
24        }
25        if let Some(employees_count) = &self.employees_count {
26            all_conditions_pass &= employees_count.evaluate(&parameters)?;
27        }
28        Ok(all_conditions_pass)
29    }
30
31    pub fn set_some(&mut self, incoming: &Self) {
32        if self.current_time.is_none() {
33            self.current_time = incoming.current_time.clone();
34        }
35        if self.employees_count.is_none() {
36            self.employees_count = incoming.employees_count.clone();
37        }
38    }
39}
40
41#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
42pub struct Parameters {
43    #[serde(rename = "employees-count")]
44    pub employees_count: Option<usize>,
45    pub commercial: bool,
46    #[serde(rename = "include-voluntary-donations")]
47    pub include_voluntary_plans: bool,
48}
49
50impl std::default::Default for Parameters {
51    fn default() -> Self {
52        Self {
53            employees_count: None,
54            commercial: true,
55            include_voluntary_plans: true,
56        }
57    }
58}
59
60impl std::fmt::Display for Parameters {
61    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62        write!(
63            f,
64            "{}",
65            serde_json::to_string_pretty(&self).map_err(|_| std::fmt::Error::default())?
66        )
67    }
68}