Skip to content

Commit ae24efd

Browse files
committed
refactor(ffi): Handle unknown UserPowerLevel variant
Signed-off-by: Kévin Commaille <[email protected]>
1 parent 903ac69 commit ae24efd

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

bindings/matrix-sdk-ffi/src/room_member.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,13 @@ pub fn suggested_role_for_power_level(
6969
Ok(RoomMemberRole::suggested_role_for_power_level(power_level.try_into()?))
7070
}
7171

72+
/// Get the suggested power level for the given role.
73+
///
74+
/// Returns an error if the value of the power level is unsupported.
7275
#[matrix_sdk_ffi_macros::export]
73-
pub fn suggested_power_level_for_role(role: RoomMemberRole) -> PowerLevel {
76+
pub fn suggested_power_level_for_role(role: RoomMemberRole) -> Result<PowerLevel, ClientError> {
7477
// It's not possible to expose methods on an Enum through Uniffi ☹️
75-
role.suggested_power_level().into()
78+
Ok(role.suggested_power_level().try_into()?)
7679
}
7780

7881
/// Generates a `matrix.to` permalink to the given userID.
@@ -106,8 +109,8 @@ impl TryFrom<SdkRoomMember> for RoomMember {
106109
avatar_url: m.avatar_url().map(|a| a.to_string()),
107110
membership: m.membership().clone().try_into()?,
108111
is_name_ambiguous: m.name_ambiguous(),
109-
power_level: m.power_level().into(),
110-
normalized_power_level: m.normalized_power_level().into(),
112+
power_level: m.power_level().try_into()?,
113+
normalized_power_level: m.normalized_power_level().try_into()?,
111114
is_ignored: m.is_ignored(),
112115
suggested_role_for_power_level: m.suggested_role_for_power_level(),
113116
membership_change_reason: m.event().reason().map(|s| s.to_owned()),
@@ -148,12 +151,14 @@ pub enum PowerLevel {
148151
Value { value: i64 },
149152
}
150153

151-
impl From<UserPowerLevel> for PowerLevel {
152-
fn from(value: UserPowerLevel) -> Self {
154+
impl TryFrom<UserPowerLevel> for PowerLevel {
155+
type Error = NotYetImplemented;
156+
157+
fn try_from(value: UserPowerLevel) -> Result<Self, Self::Error> {
153158
match value {
154-
UserPowerLevel::Infinite => Self::Infinite,
155-
UserPowerLevel::Int(value) => Self::Value { value: value.into() },
156-
_ => unimplemented!(),
159+
UserPowerLevel::Infinite => Ok(Self::Infinite),
160+
UserPowerLevel::Int(value) => Ok(Self::Value { value: value.into() }),
161+
_ => Err(NotYetImplemented),
157162
}
158163
}
159164
}

0 commit comments

Comments
 (0)