diff --git a/core/src/peer_id.rs b/core/src/peer_id.rs index e5165857470..9e586ee6724 100644 --- a/core/src/peer_id.rs +++ b/core/src/peer_id.rs @@ -23,7 +23,7 @@ use bs58; use thiserror::Error; use multihash::{self, Code, Sha2_256}; use rand::Rng; -use std::{convert::TryFrom, borrow::Borrow, fmt, hash, str::FromStr}; +use std::{convert::TryFrom, borrow::Borrow, fmt, hash, str::FromStr, cmp}; /// Public keys with byte-lengths smaller than `MAX_INLINE_KEY_LENGTH` will be /// automatically used as the peer id using an identity multihash. @@ -57,6 +57,21 @@ impl fmt::Display for PeerId { } } +impl cmp::PartialOrd for PeerId { + fn partial_cmp(&self, other: &Self) -> Option { + Some(Ord::cmp(self, other)) + } +} + +impl cmp::Ord for PeerId { + fn cmp(&self, other: &Self) -> cmp::Ordering { + // must use borrow, because as_bytes is not consistent with equality + let lhs: &[u8] = self.borrow(); + let rhs: &[u8] = other.borrow(); + lhs.cmp(rhs) + } +} + impl PeerId { /// Builds a `PeerId` from a public key. pub fn from_public_key(key: PublicKey) -> PeerId {