From f448f6756e715028a54b53031830b294967e2f54 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 26 Nov 2021 00:03:24 +0100 Subject: [PATCH] identifiers: Derive PartialEq, Eq, PartialOrd, Ord, Hash for str newtypes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … instead of generating them in our own macro. --- crates/ruma-identifiers/src/client_secret.rs | 1 + crates/ruma-identifiers/src/device_id.rs | 1 + crates/ruma-identifiers/src/device_key_id.rs | 1 + crates/ruma-identifiers/src/event_id.rs | 1 + crates/ruma-identifiers/src/key_name.rs | 1 + crates/ruma-identifiers/src/macros.rs | 26 ------------------- crates/ruma-identifiers/src/mxc_uri.rs | 1 + crates/ruma-identifiers/src/room_alias_id.rs | 1 + crates/ruma-identifiers/src/room_id.rs | 1 + .../src/room_id_or_room_alias_id.rs | 1 + crates/ruma-identifiers/src/room_name.rs | 1 + crates/ruma-identifiers/src/server_name.rs | 1 + crates/ruma-identifiers/src/session_id.rs | 1 + crates/ruma-identifiers/src/user_id.rs | 1 + 14 files changed, 13 insertions(+), 26 deletions(-) diff --git a/crates/ruma-identifiers/src/client_secret.rs b/crates/ruma-identifiers/src/client_secret.rs index abfa8cd4..57cd1168 100644 --- a/crates/ruma-identifiers/src/client_secret.rs +++ b/crates/ruma-identifiers/src/client_secret.rs @@ -5,6 +5,7 @@ /// Client secrets in Matrix are opaque character sequences of `[0-9a-zA-Z.=_-]`. Their length must /// must not exceed 255 characters. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ClientSecret(str); opaque_identifier_validated!(ClientSecret, ruma_identifiers_validation::client_secret::validate); diff --git a/crates/ruma-identifiers/src/device_id.rs b/crates/ruma-identifiers/src/device_id.rs index d7d3675d..5555e106 100644 --- a/crates/ruma-identifiers/src/device_id.rs +++ b/crates/ruma-identifiers/src/device_id.rs @@ -24,6 +24,7 @@ use crate::generate_localpart; /// assert_eq!(owned_id.as_str(), "ijklmnop"); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct DeviceId(str); opaque_identifier!(DeviceId); diff --git a/crates/ruma-identifiers/src/device_key_id.rs b/crates/ruma-identifiers/src/device_key_id.rs index da791ff6..bba24353 100644 --- a/crates/ruma-identifiers/src/device_key_id.rs +++ b/crates/ruma-identifiers/src/device_key_id.rs @@ -4,6 +4,7 @@ use crate::{crypto_algorithms::DeviceKeyAlgorithm, DeviceId}; /// A key algorithm and a device id, combined with a ':'. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct DeviceKeyId(str); opaque_identifier_validated!(DeviceKeyId, ruma_identifiers_validation::device_key_id::validate); diff --git a/crates/ruma-identifiers/src/event_id.rs b/crates/ruma-identifiers/src/event_id.rs index 7366ec02..bd749c70 100644 --- a/crates/ruma-identifiers/src/event_id.rs +++ b/crates/ruma-identifiers/src/event_id.rs @@ -38,6 +38,7 @@ use crate::ServerName; /// ); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct EventId(str); opaque_identifier_validated!(EventId, ruma_identifiers_validation::event_id::validate); diff --git a/crates/ruma-identifiers/src/key_name.rs b/crates/ruma-identifiers/src/key_name.rs index 9e21ddde..a0cebcae 100644 --- a/crates/ruma-identifiers/src/key_name.rs +++ b/crates/ruma-identifiers/src/key_name.rs @@ -3,6 +3,7 @@ /// Key identifiers in Matrix are opaque character sequences of `[a-zA-Z_]`. This type is /// provided simply for its semantic value. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct KeyName(str); opaque_identifier!(KeyName); diff --git a/crates/ruma-identifiers/src/macros.rs b/crates/ruma-identifiers/src/macros.rs index 0e22ef52..c6ed7e1b 100644 --- a/crates/ruma-identifiers/src/macros.rs +++ b/crates/ruma-identifiers/src/macros.rs @@ -38,32 +38,6 @@ macro_rules! as_str_based_impls { } } - impl PartialEq for $id { - fn eq(&self, other: &Self) -> bool { - self.as_str() == other.as_str() - } - } - - impl Eq for $id {} - - impl PartialOrd for $id { - fn partial_cmp(&self, other: &Self) -> Option { - PartialOrd::partial_cmp(self.as_str(), other.as_str()) - } - } - - impl Ord for $id { - fn cmp(&self, other: &Self) -> std::cmp::Ordering { - Ord::cmp(self.as_str(), other.as_str()) - } - } - - impl std::hash::Hash for $id { - fn hash(&self, state: &mut H) { - self.as_str().hash(state); - } - } - #[cfg(feature = "serde")] impl serde::Serialize for $id { fn serialize(&self, serializer: S) -> Result diff --git a/crates/ruma-identifiers/src/mxc_uri.rs b/crates/ruma-identifiers/src/mxc_uri.rs index ff1d251e..7490aca1 100644 --- a/crates/ruma-identifiers/src/mxc_uri.rs +++ b/crates/ruma-identifiers/src/mxc_uri.rs @@ -15,6 +15,7 @@ type Result = std::result::Result; /// [MXC URI]: https://matrix.org/docs/spec/client_server/r0.6.1#mxc-uri #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct MxcUri(str); opaque_identifier!(MxcUri); diff --git a/crates/ruma-identifiers/src/room_alias_id.rs b/crates/ruma-identifiers/src/room_alias_id.rs index 46a09b6e..753d2ada 100644 --- a/crates/ruma-identifiers/src/room_alias_id.rs +++ b/crates/ruma-identifiers/src/room_alias_id.rs @@ -18,6 +18,7 @@ use crate::{server_name::ServerName, EventId, MatrixToRef}; /// ); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RoomAliasId(str); opaque_identifier_validated!(RoomAliasId, ruma_identifiers_validation::room_alias_id::validate); diff --git a/crates/ruma-identifiers/src/room_id.rs b/crates/ruma-identifiers/src/room_id.rs index 12551d38..25da31b4 100644 --- a/crates/ruma-identifiers/src/room_id.rs +++ b/crates/ruma-identifiers/src/room_id.rs @@ -18,6 +18,7 @@ use crate::{EventId, MatrixToRef, ServerName}; /// ); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RoomId(str); opaque_identifier_validated!(RoomId, ruma_identifiers_validation::room_id::validate); diff --git a/crates/ruma-identifiers/src/room_id_or_room_alias_id.rs b/crates/ruma-identifiers/src/room_id_or_room_alias_id.rs index 43a3e201..86a617a6 100644 --- a/crates/ruma-identifiers/src/room_id_or_room_alias_id.rs +++ b/crates/ruma-identifiers/src/room_id_or_room_alias_id.rs @@ -27,6 +27,7 @@ use crate::{server_name::ServerName, RoomAliasId, RoomId}; /// ); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RoomIdOrAliasId(str); opaque_identifier_validated!( diff --git a/crates/ruma-identifiers/src/room_name.rs b/crates/ruma-identifiers/src/room_name.rs index 0bd8d491..f839453b 100644 --- a/crates/ruma-identifiers/src/room_name.rs +++ b/crates/ruma-identifiers/src/room_name.rs @@ -4,6 +4,7 @@ /// /// It can't exceed 255 bytes or be empty. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RoomName(str); opaque_identifier_validated!(RoomName, ruma_identifiers_validation::room_name::validate); diff --git a/crates/ruma-identifiers/src/server_name.rs b/crates/ruma-identifiers/src/server_name.rs index 8de7bb92..434fc20c 100644 --- a/crates/ruma-identifiers/src/server_name.rs +++ b/crates/ruma-identifiers/src/server_name.rs @@ -2,6 +2,7 @@ /// A Matrix-spec compliant server name. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct ServerName(str); opaque_identifier_validated!(ServerName, ruma_identifiers_validation::server_name::validate); diff --git a/crates/ruma-identifiers/src/session_id.rs b/crates/ruma-identifiers/src/session_id.rs index 78ae90be..1320fb38 100644 --- a/crates/ruma-identifiers/src/session_id.rs +++ b/crates/ruma-identifiers/src/session_id.rs @@ -5,6 +5,7 @@ /// Session IDs in Matrix are opaque character sequences of `[0-9a-zA-Z.=_-]`. Their length must /// must not exceed 255 characters. #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SessionId(str); opaque_identifier_validated!(SessionId, ruma_identifiers_validation::session_id::validate); diff --git a/crates/ruma-identifiers/src/user_id.rs b/crates/ruma-identifiers/src/user_id.rs index 31feccdd..14852d51 100644 --- a/crates/ruma-identifiers/src/user_id.rs +++ b/crates/ruma-identifiers/src/user_id.rs @@ -18,6 +18,7 @@ use crate::{MatrixToRef, ServerName}; /// ); /// ``` #[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct UserId(str); opaque_identifier_validated!(UserId, ruma_identifiers_validation::user_id::validate);