/ console / program / src / data / literal / equal.rs
equal.rs
  1  // Copyright (c) 2019-2025 Alpha-Delta Network Inc.
  2  // This file is part of the alphavm library.
  3  
  4  // Licensed under the Apache License, Version 2.0 (the "License");
  5  // you may not use this file except in compliance with the License.
  6  // You may obtain a copy of the License at:
  7  
  8  // http://www.apache.org/licenses/LICENSE-2.0
  9  
 10  // Unless required by applicable law or agreed to in writing, software
 11  // distributed under the License is distributed on an "AS IS" BASIS,
 12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  // See the License for the specific language governing permissions and
 14  // limitations under the License.
 15  
 16  use super::*;
 17  
 18  impl<N: Network> Eq for Literal<N> {}
 19  
 20  impl<N: Network> PartialEq for Literal<N> {
 21      /// Returns `true` if `self` and `other` are equal.
 22      fn eq(&self, other: &Self) -> bool {
 23          *self.is_equal(other)
 24      }
 25  }
 26  
 27  impl<N: Network> core::hash::Hash for Literal<N> {
 28      fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
 29          match self {
 30              Self::Address(a) => a.hash(state),
 31              Self::Boolean(a) => a.hash(state),
 32              Self::Field(a) => a.hash(state),
 33              Self::Group(a) => a.hash(state),
 34              Self::I8(a) => a.hash(state),
 35              Self::I16(a) => a.hash(state),
 36              Self::I32(a) => a.hash(state),
 37              Self::I64(a) => a.hash(state),
 38              Self::I128(a) => a.hash(state),
 39              Self::U8(a) => a.hash(state),
 40              Self::U16(a) => a.hash(state),
 41              Self::U32(a) => a.hash(state),
 42              Self::U64(a) => a.hash(state),
 43              Self::U128(a) => a.hash(state),
 44              Self::Scalar(a) => a.hash(state),
 45              Self::Signature(a) => a.hash(state),
 46              Self::String(a) => a.hash(state),
 47          }
 48      }
 49  }
 50  
 51  impl<N: Network> Equal for Literal<N> {
 52      type Output = Boolean<N>;
 53  
 54      /// Returns `true` if `self` and `other` are equal.
 55      fn is_equal(&self, other: &Self) -> Self::Output {
 56          match (self, other) {
 57              (Self::Address(a), Self::Address(b)) => a.is_equal(b),
 58              (Self::Boolean(a), Self::Boolean(b)) => a.is_equal(b),
 59              (Self::Field(a), Self::Field(b)) => a.is_equal(b),
 60              (Self::Group(a), Self::Group(b)) => a.is_equal(b),
 61              (Self::I8(a), Self::I8(b)) => a.is_equal(b),
 62              (Self::I16(a), Self::I16(b)) => a.is_equal(b),
 63              (Self::I32(a), Self::I32(b)) => a.is_equal(b),
 64              (Self::I64(a), Self::I64(b)) => a.is_equal(b),
 65              (Self::I128(a), Self::I128(b)) => a.is_equal(b),
 66              (Self::U8(a), Self::U8(b)) => a.is_equal(b),
 67              (Self::U16(a), Self::U16(b)) => a.is_equal(b),
 68              (Self::U32(a), Self::U32(b)) => a.is_equal(b),
 69              (Self::U64(a), Self::U64(b)) => a.is_equal(b),
 70              (Self::U128(a), Self::U128(b)) => a.is_equal(b),
 71              (Self::Scalar(a), Self::Scalar(b)) => a.is_equal(b),
 72              (Self::Signature(a), Self::Signature(b)) => a.is_equal(b),
 73              (Self::String(a), Self::String(b)) => a.is_equal(b),
 74              _ => Boolean::new(false),
 75          }
 76      }
 77  
 78      /// Returns `true` if `self` and `other` are *not* equal.
 79      fn is_not_equal(&self, other: &Self) -> Self::Output {
 80          match (self, other) {
 81              (Self::Address(a), Self::Address(b)) => a.is_not_equal(b),
 82              (Self::Boolean(a), Self::Boolean(b)) => a.is_not_equal(b),
 83              (Self::Field(a), Self::Field(b)) => a.is_not_equal(b),
 84              (Self::Group(a), Self::Group(b)) => a.is_not_equal(b),
 85              (Self::I8(a), Self::I8(b)) => a.is_not_equal(b),
 86              (Self::I16(a), Self::I16(b)) => a.is_not_equal(b),
 87              (Self::I32(a), Self::I32(b)) => a.is_not_equal(b),
 88              (Self::I64(a), Self::I64(b)) => a.is_not_equal(b),
 89              (Self::I128(a), Self::I128(b)) => a.is_not_equal(b),
 90              (Self::U8(a), Self::U8(b)) => a.is_not_equal(b),
 91              (Self::U16(a), Self::U16(b)) => a.is_not_equal(b),
 92              (Self::U32(a), Self::U32(b)) => a.is_not_equal(b),
 93              (Self::U64(a), Self::U64(b)) => a.is_not_equal(b),
 94              (Self::U128(a), Self::U128(b)) => a.is_not_equal(b),
 95              (Self::Scalar(a), Self::Scalar(b)) => a.is_not_equal(b),
 96              (Self::Signature(a), Self::Signature(b)) => a.is_not_equal(b),
 97              (Self::String(a), Self::String(b)) => a.is_not_equal(b),
 98              _ => Boolean::new(true),
 99          }
100      }
101  }