From fe4ddfde8907c5dd63fbe3700a5a5dc7c40b58ac Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Thu, 9 Jun 2022 21:15:25 +0200 Subject: [PATCH] chore(crypto-nodejs): Remove `clone` calls when possible. --- .../src/identifiers.rs | 4 ++ .../matrix-sdk-crypto-nodejs/src/machine.rs | 42 +++++++++---------- .../src/sync_events.rs | 9 ++-- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/crates/matrix-sdk-crypto-nodejs/src/identifiers.rs b/crates/matrix-sdk-crypto-nodejs/src/identifiers.rs index a2576f7ea..397664e6a 100644 --- a/crates/matrix-sdk-crypto-nodejs/src/identifiers.rs +++ b/crates/matrix-sdk-crypto-nodejs/src/identifiers.rs @@ -58,6 +58,10 @@ impl UserId { } } +pub(crate) fn lower_user_ids_to_ruma(users: Vec<&UserId>) -> impl Iterator { + users.into_iter().map(|user| user.inner.as_ref()) +} + /// A Matrix key ID. /// /// Device identifiers in Matrix are completely opaque character diff --git a/crates/matrix-sdk-crypto-nodejs/src/machine.rs b/crates/matrix-sdk-crypto-nodejs/src/machine.rs index e77185daf..5c29abeea 100644 --- a/crates/matrix-sdk-crypto-nodejs/src/machine.rs +++ b/crates/matrix-sdk-crypto-nodejs/src/machine.rs @@ -49,11 +49,12 @@ impl OlmMachine { user_id: &identifiers::UserId, device_id: &identifiers::DeviceId, ) -> Self { - let user_id = user_id.inner.clone(); - let device_id = device_id.inner.clone(); - OlmMachine { - inner: matrix_sdk_crypto::OlmMachine::new(user_id.as_ref(), device_id.as_ref()).await, + inner: matrix_sdk_crypto::OlmMachine::new( + user_id.inner.as_ref(), + device_id.inner.as_ref(), + ) + .await, } } @@ -111,7 +112,7 @@ impl OlmMachine { unused_fallback_keys: Vec, ) -> napi::Result { let to_device_events = serde_json::from_str(to_device_events.as_ref()).map_err(into_err)?; - let changed_devices = changed_devices.inner.clone(); + let changed_devices = &changed_devices.inner; let one_time_key_counts = one_time_key_counts .iter() .map(|(key, value)| (DeviceKeyAlgorithm::from(key.as_str()), UInt::from(*value))) @@ -128,7 +129,7 @@ impl OlmMachine { .inner .receive_sync_changes( to_device_events, - &changed_devices, + changed_devices, &one_time_key_counts, unused_fallback_keys.as_deref(), ) @@ -236,9 +237,12 @@ impl OlmMachine { &self, users: Option>, ) -> napi::Result> { - let users = users.iter().flatten().map(|user| user.inner.as_ref()); - - match self.inner.get_missing_sessions(users).await.map_err(into_err)? { + match self + .inner + .get_missing_sessions(identifiers::lower_user_ids_to_ruma(users.unwrap_or_default())) + .await + .map_err(into_err)? + { Some((transaction_id, keys_claim_request)) => Ok(Some( requests::KeysClaimRequest::try_from(( transaction_id.to_string(), @@ -264,10 +268,7 @@ impl OlmMachine { /// * `users`, an array over user IDs that should be marked for tracking. #[napi] pub async fn update_tracked_users(&self, users: Vec<&identifiers::UserId>) { - let users = - users.into_iter().map(|user| user.inner.clone()).collect::>(); - - self.inner.update_tracked_users(users.iter().map(AsRef::as_ref)).await; + self.inner.update_tracked_users(identifiers::lower_user_ids_to_ruma(users)).await; } /// Get to-device requests to share a room key with users in a room. @@ -284,16 +285,15 @@ impl OlmMachine { users: Vec<&identifiers::UserId>, encryption_settings: &encryption::EncryptionSettings, ) -> napi::Result { - let room_id = room_id.inner.clone(); - let users = - users.into_iter().map(|user| user.inner.clone()).collect::>(); + let room_id = room_id.inner.as_ref(); + let users = identifiers::lower_user_ids_to_ruma(users); let encryption_settings = matrix_sdk_crypto::olm::EncryptionSettings::from(encryption_settings); serde_json::to_string( &self .inner - .share_room_key(&room_id, users.iter().map(AsRef::as_ref), encryption_settings) + .share_room_key(room_id, users, encryption_settings) .await .map_err(into_err)?, ) @@ -316,13 +316,13 @@ impl OlmMachine { event_type: String, content: String, ) -> napi::Result { - let room_id = room_id.inner.clone(); + let room_id = room_id.inner.as_ref(); let content: JsonValue = serde_json::from_str(content.as_str()).map_err(into_err)?; serde_json::to_string( &self .inner - .encrypt_room_event_raw(&room_id, content, event_type.as_ref()) + .encrypt_room_event_raw(room_id, content, event_type.as_ref()) .await .map_err(into_err)?, ) @@ -343,8 +343,8 @@ impl OlmMachine { ) -> napi::Result { let event: OriginalSyncRoomEncryptedEvent = serde_json::from_str(event.as_str()).map_err(into_err)?; - let room_id = room_id.inner.clone(); - let room_event = self.inner.decrypt_room_event(&event, &room_id).await.map_err(into_err)?; + let room_id = room_id.inner.as_ref(); + let room_event = self.inner.decrypt_room_event(&event, room_id).await.map_err(into_err)?; Ok(room_event.into()) } diff --git a/crates/matrix-sdk-crypto-nodejs/src/sync_events.rs b/crates/matrix-sdk-crypto-nodejs/src/sync_events.rs index 390646641..1f7f1619e 100644 --- a/crates/matrix-sdk-crypto-nodejs/src/sync_events.rs +++ b/crates/matrix-sdk-crypto-nodejs/src/sync_events.rs @@ -20,9 +20,8 @@ impl DeviceLists { ) -> Self { let mut inner = ruma::api::client::sync::sync_events::v3::DeviceLists::default(); - inner.changed = - changed.unwrap_or_default().into_iter().map(|user| user.inner.clone()).collect(); - inner.left = left.unwrap_or_default().into_iter().map(|user| user.inner.clone()).collect(); + inner.changed = changed.into_iter().flatten().map(|user| user.inner.clone()).collect(); + inner.left = left.into_iter().flatten().map(|user| user.inner.clone()).collect(); Self { inner } } @@ -38,13 +37,13 @@ impl DeviceLists { /// previous sync. #[napi(getter)] pub fn changed(&self) -> Vec { - self.inner.changed.iter().map(|user| identifiers::UserId::from(user.clone())).collect() + self.inner.changed.iter().map(|user| identifiers::UserId::from(user.to_owned())).collect() } /// List of users who no longer share encrypted rooms since the /// previous sync response. #[napi(getter)] pub fn left(&self) -> Vec { - self.inner.left.iter().map(|user| identifiers::UserId::from(user.clone())).collect() + self.inner.left.iter().map(|user| identifiers::UserId::from(user.to_owned())).collect() } }