solti_model/domain/selector/
operator.rs1use std::fmt;
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
19#[non_exhaustive]
20pub enum SelectorOperator {
21 In,
23 NotIn,
25 Exists,
27 DoesNotExist,
29}
30
31impl fmt::Display for SelectorOperator {
32 #[inline]
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 Self::In => f.write_str("In"),
36 Self::NotIn => f.write_str("NotIn"),
37 Self::Exists => f.write_str("Exists"),
38 Self::DoesNotExist => f.write_str("DoesNotExist"),
39 }
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn display() {
49 assert_eq!(SelectorOperator::In.to_string(), "In");
50 assert_eq!(SelectorOperator::NotIn.to_string(), "NotIn");
51 assert_eq!(SelectorOperator::Exists.to_string(), "Exists");
52 assert_eq!(SelectorOperator::DoesNotExist.to_string(), "DoesNotExist");
53 }
54
55 #[test]
56 fn serde_roundtrip() {
57 for op in [
58 SelectorOperator::In,
59 SelectorOperator::NotIn,
60 SelectorOperator::Exists,
61 SelectorOperator::DoesNotExist,
62 ] {
63 let json = serde_json::to_string(&op).unwrap();
64 let back: SelectorOperator = serde_json::from_str(&json).unwrap();
65 assert_eq!(back, op);
66 }
67 }
68}