stefans_utils/
comparator.rs

1use core::fmt::{Debug, Display, Formatter, Result};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
5#[cfg_attr(feature = "schemars", derive(::schemars::JsonSchema))]
6pub enum Comparison {
7    Less,
8    LessOrEqual,
9    Equal,
10    Unequal,
11    GreaterOrEqual,
12    Greater,
13}
14
15impl Display for Comparison {
16    fn fmt(&self, f: &mut Formatter<'_>) -> Result {
17        f.write_str(match self {
18            Comparison::Less => "less than",
19            Comparison::LessOrEqual => "less than or equal to",
20            Comparison::Equal => "equal to",
21            Comparison::Unequal => "unequal to",
22            Comparison::GreaterOrEqual => "greater than or equal to",
23            Comparison::Greater => "greater than",
24        })
25    }
26}
27
28impl Comparison {
29    pub fn compare<T: PartialOrd + PartialEq>(&self, a: &T, b: &T) -> bool {
30        match self {
31            Comparison::Less => a < b,
32            Comparison::LessOrEqual => a <= b,
33            Comparison::Equal => a == b,
34            Comparison::Unequal => a != b,
35            Comparison::GreaterOrEqual => a >= b,
36            Comparison::Greater => a > b,
37        }
38    }
39}