stefans_utils/
comparator.rs1use 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}