1use core::fmt::Display;
2
3use crate::TypeHash;
4
5use crate::{BinaryOperator, OperationReflect};
6
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Debug, Clone, TypeHash, PartialEq, Eq, Hash, OperationReflect)]
10#[operation(opcode_name = ComparisonOpCode, pure)]
11pub enum Comparison {
12 Lower(BinaryOperator),
13 LowerEqual(BinaryOperator),
14 #[operation(commutative)]
15 Equal(BinaryOperator),
16 #[operation(commutative)]
17 NotEqual(BinaryOperator),
18 GreaterEqual(BinaryOperator),
19 Greater(BinaryOperator),
20}
21
22impl Display for Comparison {
23 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
24 match self {
25 Comparison::Equal(op) => write!(f, "{} == {}", op.lhs, op.rhs),
26 Comparison::NotEqual(op) => write!(f, "{} != {}", op.lhs, op.rhs),
27 Comparison::Lower(op) => write!(f, "{} < {}", op.lhs, op.rhs),
28 Comparison::Greater(op) => write!(f, "{} > {}", op.lhs, op.rhs),
29 Comparison::LowerEqual(op) => write!(f, "{} <= {}", op.lhs, op.rhs),
30 Comparison::GreaterEqual(op) => write!(f, "{} >= {}", op.lhs, op.rhs),
31 }
32 }
33}