json_rules_engine_fork/
status.rs

1use serde::{Deserialize, Serialize};
2use std::ops::{BitAnd, BitOr, Not};
3
4/// The status of a rule check
5#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
6pub enum Status {
7    /// Rule was satisfied
8    Met,
9    /// Rule was not satisfied
10    NotMet,
11    /// There was not enough information to evaluate
12    Unknown,
13}
14
15impl BitAnd for Status {
16    type Output = Status;
17    fn bitand(self, rhs: Status) -> Status {
18        match (self, rhs) {
19            (Status::Met, Status::Met) => Status::Met,
20            (Status::NotMet, _) | (_, Status::NotMet) => Status::NotMet,
21            (_, _) => Status::Unknown,
22        }
23    }
24}
25
26impl BitOr for Status {
27    type Output = Status;
28    fn bitor(self, rhs: Status) -> Status {
29        match (self, rhs) {
30            (Status::NotMet, Status::NotMet) => Status::NotMet,
31            (Status::Met, _) | (_, Status::Met) => Status::Met,
32            (_, _) => Status::Unknown,
33        }
34    }
35}
36
37impl Not for Status {
38    type Output = Status;
39
40    fn not(self) -> Self::Output {
41        match self {
42            Status::Met => Status::NotMet,
43            Status::NotMet => Status::Met,
44            Status::Unknown => Status::Unknown,
45        }
46    }
47}