identifiers: Fix the bounds for Clone, Serialize and Deserialize on Signatures

This commit is contained in:
Kévin Commaille 2024-10-26 16:22:59 +02:00 committed by strawberry
parent 35da79a26e
commit eb57bb2797

View File

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