From a891d1c615cb4bbf97457e1746ae011da739df65 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 23 Mar 2021 10:38:05 +0100 Subject: [PATCH] client-api: Make types in r0::keys non-exhaustive --- ruma-client-api/src/r0/keys.rs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/ruma-client-api/src/r0/keys.rs b/ruma-client-api/src/r0/keys.rs index a0e85825..3e7e3457 100644 --- a/ruma-client-api/src/r0/keys.rs +++ b/ruma-client-api/src/r0/keys.rs @@ -15,18 +15,30 @@ pub mod upload_signatures; #[cfg(feature = "unstable-pre-spec")] pub mod upload_signing_keys; +/// Signatures for a `SignedKey` object. +pub type SignedKeySignatures = BTreeMap>; + /// A key for the SignedCurve25519 algorithm #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] pub struct SignedKey { /// Base64-encoded 32-byte Curve25519 public key. pub key: String, /// Signatures for the key object. - pub signatures: BTreeMap>, + pub signatures: SignedKeySignatures, +} + +impl SignedKey { + /// Creates a new `SignedKey` with the given key and signatures. + pub fn new(key: String, signatures: SignedKeySignatures) -> Self { + Self { key, signatures } + } } /// A one-time public key for "pre-key" messages. #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] #[serde(untagged)] pub enum OneTimeKey { /// A key containing signatures, for the SignedCurve25519 algorithm. @@ -36,8 +48,12 @@ pub enum OneTimeKey { Key(String), } +/// Signatures for a `CrossSigningKey` object. +pub type CrossSigningKeySignatures = BTreeMap>; + /// A cross signing key. #[derive(Clone, Debug, Deserialize, Serialize)] +#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] pub struct CrossSigningKey { /// The ID of the user the key belongs to. pub user_id: UserId, @@ -50,11 +66,25 @@ pub struct CrossSigningKey { /// Signatures of the key. Only optional for master key. #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] - pub signatures: BTreeMap>, + pub signatures: CrossSigningKeySignatures, +} + +impl CrossSigningKey { + /// Creates a new `CrossSigningKey` with the given user ID, usage, keys and + /// signatures. + pub fn new( + user_id: UserId, + usage: Vec, + keys: BTreeMap, + signatures: CrossSigningKeySignatures, + ) -> Self { + Self { user_id, usage, keys, signatures } + } } /// The usage of a cross signing key. #[derive(Clone, Debug, Deserialize, Serialize)] +#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] #[serde(rename_all = "snake_case")] pub enum KeyUsage { /// Master key.