datex_core/global/operators/
comparison.rs1use crate::global::instruction_codes::InstructionCode;
2use crate::global::protocol_structures::instructions::RegularInstruction;
3use core::fmt::Display;
4use core::prelude::rust_2024::*;
5
6#[derive(Clone, Debug, PartialEq, Copy)]
7pub enum ComparisonOperator {
8 Is, Matches, StructuralEqual, NotStructuralEqual, Equal, NotEqual, LessThan, GreaterThan, LessThanOrEqual, GreaterThanOrEqual, }
19
20impl Display for ComparisonOperator {
21 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
22 core::write!(
23 f,
24 "{}",
25 match self {
26 ComparisonOperator::Is => "is",
27 ComparisonOperator::Matches => "matches",
28 ComparisonOperator::StructuralEqual => "==",
29 ComparisonOperator::NotStructuralEqual => "!=",
30 ComparisonOperator::Equal => "===",
31 ComparisonOperator::NotEqual => "!==",
32 ComparisonOperator::LessThan => "<",
33 ComparisonOperator::GreaterThan => ">",
34 ComparisonOperator::LessThanOrEqual => "<=",
35 ComparisonOperator::GreaterThanOrEqual => ">=",
36 }
37 )
38 }
39}
40
41impl From<&ComparisonOperator> for InstructionCode {
42 fn from(op: &ComparisonOperator) -> Self {
43 match op {
44 ComparisonOperator::StructuralEqual => {
45 InstructionCode::STRUCTURAL_EQUAL
46 }
47 ComparisonOperator::NotStructuralEqual => {
48 InstructionCode::NOT_STRUCTURAL_EQUAL
49 }
50 ComparisonOperator::Equal => InstructionCode::EQUAL,
51 ComparisonOperator::NotEqual => InstructionCode::NOT_EQUAL,
52 ComparisonOperator::Is => InstructionCode::IS,
53 ComparisonOperator::Matches => InstructionCode::MATCHES,
54 operator => core::todo!(
55 "Comparison operator {:?} not implemented for InstructionCode",
56 operator
57 ),
58 }
59 }
60}
61
62impl From<ComparisonOperator> for InstructionCode {
63 fn from(op: ComparisonOperator) -> Self {
64 InstructionCode::from(&op)
65 }
66}
67impl From<&RegularInstruction> for ComparisonOperator {
68 fn from(instruction: &RegularInstruction) -> Self {
69 match instruction {
70 RegularInstruction::StructuralEqual => {
71 ComparisonOperator::StructuralEqual
72 }
73 RegularInstruction::Equal => ComparisonOperator::Equal,
74 RegularInstruction::NotStructuralEqual => {
75 ComparisonOperator::NotStructuralEqual
76 }
77 RegularInstruction::NotEqual => ComparisonOperator::NotEqual,
78 RegularInstruction::Is => ComparisonOperator::Is,
79 RegularInstruction::Matches => ComparisonOperator::Matches,
80 _ => {
81 core::todo!(
82 "Comparison operator for instruction {:?} not implemented",
83 instruction
84 );
85 }
86 }
87 }
88}
89
90impl From<RegularInstruction> for ComparisonOperator {
91 fn from(instruction: RegularInstruction) -> Self {
92 ComparisonOperator::from(&instruction)
93 }
94}