diff --git a/bindings/matrix-sdk-ffi/src/api.udl b/bindings/matrix-sdk-ffi/src/api.udl index 905908efb..b3f5801f1 100644 --- a/bindings/matrix-sdk-ffi/src/api.udl +++ b/bindings/matrix-sdk-ffi/src/api.udl @@ -274,6 +274,9 @@ interface Room { [Throws=ClientError] void remove_avatar(); + + [Throws=ClientError] + void invite_user_by_id(string user_id); }; callback interface TimelineListener { diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index 737b80aac..c451f727e 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -554,6 +554,20 @@ impl Room { Ok(()) }) } + + pub fn invite_user_by_id(&self, user_id: String) -> Result<()> { + let room = match &self.room { + SdkRoom::Joined(joined_room) => joined_room.clone(), + _ => bail!("Can't invite user to room that isn't in joined state"), + }; + + RUNTIME.block_on(async move { + let user = <&UserId>::try_from(user_id.as_str()) + .context("Could not create user from string")?; + room.invite_user_by_id(user).await?; + Ok(()) + }) + } } impl std::ops::Deref for Room {