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