diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index 630fffdc3..c0a1af288 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -576,15 +576,21 @@ impl Room { Ok(()) } - pub async fn update_power_level_for_user( + pub async fn update_power_levels_for_users( &self, - user_id: String, - power_level: i64, + updates: Vec, ) -> Result<(), ClientError> { - let user_id = UserId::parse(&user_id)?; - let power_level = Int::new(power_level).context("Invalid power level")?; + let updates = updates + .iter() + .map(|update| { + let user_id: &UserId = update.user_id.as_str().try_into()?; + let power_level = Int::new(update.power_level).context("Invalid power level")?; + Ok((user_id, power_level)) + }) + .collect::>>()?; + self.inner - .update_power_levels(vec![(&user_id, power_level)]) + .update_power_levels(updates) .await .map_err(|e| ClientError::Generic { msg: e.to_string() })?; Ok(()) @@ -633,6 +639,15 @@ impl RoomMembersIterator { } } +/// An update for a particular user's power level within the room. +#[derive(uniffi::Record)] +pub struct UserPowerLevelUpdate { + /// The user ID of the user to update. + user_id: String, + /// The power level to assign to the user. + power_level: i64, +} + impl TryFrom for RumaAvatarImageInfo { type Error = MediaInfoError;