openfare_lib/lock/plan/conditions/
mod.rs1use 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(¶meters)?;
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}