From 70ce1ca53f990a5c7505b3d0c0a87030460c4ab5 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Fri, 26 Mar 2021 11:59:08 +0800 Subject: [PATCH] Impl PartialOrd and Ord for OrchardFixedBases --- src/constants.rs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/constants.rs b/src/constants.rs index 5a37a4be..dc749830 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -69,11 +69,11 @@ pub enum OrchardFixedBases { impl std::hash::Hash for OrchardFixedBases { fn hash(&self, state: &mut H) { match *self { - OrchardFixedBases::CommitIvkR(_) => state.write(b"CommitIvkR"), - OrchardFixedBases::NoteCommitR(_) => state.write(b"NoteCommitR"), - OrchardFixedBases::NullifierK(_) => state.write(b"NullifierK"), - OrchardFixedBases::ValueCommitR(_) => state.write(b"ValueCommitR"), - OrchardFixedBases::ValueCommitV(_) => state.write(b"ValueCommitV"), + OrchardFixedBases::CommitIvkR(_) => state.write(self.variant()), + OrchardFixedBases::NoteCommitR(_) => state.write(self.variant()), + OrchardFixedBases::NullifierK(_) => state.write(self.variant()), + OrchardFixedBases::ValueCommitR(_) => state.write(self.variant()), + OrchardFixedBases::ValueCommitV(_) => state.write(self.variant()), } } } @@ -88,6 +88,16 @@ impl OrchardFixedBases { Self::ValueCommitV(inner) => *inner, } } + + pub fn variant(&self) -> &[u8] { + match *self { + OrchardFixedBases::CommitIvkR(_) => b"CommitIvkR", + OrchardFixedBases::NoteCommitR(_) => b"NoteCommitR", + OrchardFixedBases::NullifierK(_) => b"NullifierK", + OrchardFixedBases::ValueCommitR(_) => b"ValueCommitR", + OrchardFixedBases::ValueCommitV(_) => b"ValueCommitV", + } + } } impl PartialEq for OrchardFixedBases { @@ -98,6 +108,18 @@ impl PartialEq for OrchardFixedBases { impl Eq for OrchardFixedBases {} +impl PartialOrd for OrchardFixedBases { + fn partial_cmp(&self, other: &Self) -> Option { + self.variant().partial_cmp(&other.variant()) + } +} + +impl Ord for OrchardFixedBases { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.variant().cmp(&other.variant()) + } +} + #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub struct OrchardFixedBase(C);