diff --git a/src/helper.rs b/src/helper.rs index 44cc143..d0854f8 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -28,3 +28,26 @@ where I: ExactSizeIterator, { } + +/** A macro which generates Eq, PartialEq, and PartialOrd implementations for +some given type. These implementations are dependent on Ord already being +implemented for that type. */ +macro_rules! impl_cmp_eq_on_ord { + ($type:ident) => { + impl PartialEq for $type { + fn eq(&self, other: &Self) -> bool { + self.cmp(other) == std::cmp::Ordering::Equal + } + } + + impl Eq for $type {} + + impl PartialOrd for $type { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } + } + }; +} + +pub(crate) use impl_cmp_eq_on_ord;