From fc56ae3dcf7d9f1cdb344cc8505a3c5932ef413a Mon Sep 17 00:00:00 2001 From: Simon Farre Date: Tue, 4 Apr 2023 11:04:54 +0200 Subject: [PATCH] Expose `invite_user_by_id` over the FFI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR is self explanatory. Exposes said function to the FFI. Defined in the .adl file, and defined to throw `ClientError` Signed-off-by: Simon Farre Co-authored-by: Damir Jelić --- bindings/matrix-sdk-ffi/src/api.udl | 3 +++ bindings/matrix-sdk-ffi/src/room.rs | 14 ++++++++++++++ 2 files changed, 17 insertions(+) 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 {