diff --git a/crates/ruma-common/src/identifiers/signatures.rs b/crates/ruma-common/src/identifiers/signatures.rs index 81581e1a..0019445a 100644 --- a/crates/ruma-common/src/identifiers/signatures.rs +++ b/crates/ruma-common/src/identifiers/signatures.rs @@ -6,8 +6,7 @@ use std::{ use serde::{Deserialize, Serialize}; use super::{ - KeyName, OwnedDeviceId, OwnedServerName, OwnedServerSigningKeyVersion, OwnedSigningKeyId, - OwnedUserId, + DeviceId, KeyName, OwnedServerName, OwnedSigningKeyId, OwnedUserId, ServerSigningKeyVersion, }; /// Map of key identifier to signature values. @@ -27,8 +26,11 @@ pub type EntitySignatures = BTreeMap, String>; /// "YbJva03ihSj5mPk+CHMJKUKlCXCPFXjXOK6VqBnN9nA2evksQcTGn6hwQfrgRHIDDXO2le49x7jnWJHMJrJoBQ"; /// signatures.insert_signature(server_name, key_identifier, signature.into()); /// ``` -#[derive(Clone, Debug, Serialize, Deserialize)] -#[serde(transparent)] +#[derive(Debug, Serialize, Deserialize)] +#[serde( + transparent, + bound(serialize = "E: Serialize", deserialize = "E: serde::de::DeserializeOwned") +)] pub struct Signatures(BTreeMap>); impl Signatures { @@ -50,11 +52,21 @@ impl Signatures { } } -/// Map of server signatures for an event, grouped by server. -pub type ServerSignatures = Signatures; +/// Map of server signatures, grouped by server. +pub type ServerSignatures = Signatures; -/// Map of device signatures for an event, grouped by user. -pub type DeviceSignatures = Signatures; +/// Map of device signatures, grouped by user. +pub type DeviceSignatures = Signatures; + +impl Clone for Signatures +where + E: Ord + Clone, + K: KeyName + ?Sized, +{ + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} impl Default for Signatures { fn default() -> Self {