Transform MessageEventType and StateEventType into sealed interfaces to handle the Custom variant, also add missing variants

This commit is contained in:
Jorge Martín 2025-12-22 10:09:37 +01:00 committed by Jorge Martin Espinosa
parent 63d205f8aa
commit 75f8c4f594
16 changed files with 230 additions and 164 deletions

View file

@ -17,19 +17,19 @@ object TimelineConfig {
* Event types that will be filtered out from the timeline (i.e. not displayed). * Event types that will be filtered out from the timeline (i.e. not displayed).
*/ */
val excludedEvents = listOf( val excludedEvents = listOf(
StateEventType.CALL_MEMBER, StateEventType.CallMember,
StateEventType.ROOM_ALIASES, StateEventType.RoomAliases,
StateEventType.ROOM_CANONICAL_ALIAS, StateEventType.RoomCanonicalAlias,
StateEventType.ROOM_GUEST_ACCESS, StateEventType.RoomGuestAccess,
StateEventType.ROOM_HISTORY_VISIBILITY, StateEventType.RoomHistoryVisibility,
StateEventType.ROOM_JOIN_RULES, StateEventType.RoomJoinRules,
StateEventType.ROOM_POWER_LEVELS, StateEventType.RoomPowerLevels,
StateEventType.ROOM_SERVER_ACL, StateEventType.RoomServerAcl,
StateEventType.ROOM_TOMBSTONE, StateEventType.RoomTombstone,
StateEventType.SPACE_CHILD, StateEventType.SpaceChild,
StateEventType.SPACE_PARENT, StateEventType.SpaceParent,
StateEventType.POLICY_RULE_ROOM, StateEventType.PolicyRuleRoom,
StateEventType.POLICY_RULE_SERVER, StateEventType.PolicyRuleServer,
StateEventType.POLICY_RULE_USER, StateEventType.PolicyRuleUser,
) )
} }

View file

@ -1236,7 +1236,7 @@ class MessagesPresenterTest {
) = FakeRoomPermissions( ) = FakeRoomPermissions(
canSendState = { type -> canSendState = { type ->
when (type) { when (type) {
StateEventType.CALL_MEMBER -> canStartCall StateEventType.CallMember -> canStartCall
else -> lambdaError() else -> lambdaError()
} }
}, },

View file

@ -230,7 +230,7 @@ class RoomCallStatePresenterTest {
return FakeRoomPermissions( return FakeRoomPermissions(
canSendState = { stateEvent -> canSendState = { stateEvent ->
when (stateEvent) { when (stateEvent) {
StateEventType.CALL_MEMBER -> canJoinCall StateEventType.CallMember -> canJoinCall
else -> lambdaError() else -> lambdaError()
} }
} }

View file

@ -643,14 +643,14 @@ class RoomDetailsPresenterTest {
canRedactOwn = canRedactOwn, canRedactOwn = canRedactOwn,
canSendState = { eventType -> canSendState = { eventType ->
when (eventType) { when (eventType) {
StateEventType.ROOM_JOIN_RULES -> canChangeRoomAccess StateEventType.RoomJoinRules -> canChangeRoomAccess
StateEventType.ROOM_HISTORY_VISIBILITY -> canChangeHistoryVisibility StateEventType.RoomHistoryVisibility -> canChangeHistoryVisibility
StateEventType.ROOM_ENCRYPTION -> canChangeEncryption StateEventType.RoomEncryption -> canChangeEncryption
StateEventType.ROOM_CANONICAL_ALIAS -> canChangeRoomVisibility StateEventType.RoomCanonicalAlias -> canChangeRoomVisibility
StateEventType.ROOM_AVATAR -> canChangeAvatar StateEventType.RoomAvatar -> canChangeAvatar
StateEventType.ROOM_NAME -> canChangeName StateEventType.RoomName -> canChangeName
StateEventType.ROOM_TOPIC -> canChangeTopic StateEventType.RoomTopic -> canChangeTopic
StateEventType.ROOM_POWER_LEVELS -> canChangePowerLevels StateEventType.RoomPowerLevels -> canChangePowerLevels
else -> lambdaError() else -> lambdaError()
} }
} }

View file

@ -30,8 +30,8 @@ data class RoomDetailsEditPermissions(
fun RoomPermissions.roomDetailsEditPermissions(): RoomDetailsEditPermissions { fun RoomPermissions.roomDetailsEditPermissions(): RoomDetailsEditPermissions {
return RoomDetailsEditPermissions( return RoomDetailsEditPermissions(
canEditName = canOwnUserSendState(StateEventType.ROOM_NAME), canEditName = canOwnUserSendState(StateEventType.RoomName),
canEditTopic = canOwnUserSendState(StateEventType.ROOM_TOPIC), canEditTopic = canOwnUserSendState(StateEventType.RoomTopic),
canEditAvatar = canOwnUserSendState(StateEventType.ROOM_AVATAR), canEditAvatar = canOwnUserSendState(StateEventType.RoomAvatar),
) )
} }

View file

@ -129,9 +129,9 @@ class RoomDetailsEditPresenterTest {
val room = aJoinedRoom( val room = aJoinedRoom(
canSendState = { stateEventType -> canSendState = { stateEventType ->
when (stateEventType) { when (stateEventType) {
StateEventType.ROOM_NAME -> true StateEventType.RoomName -> true
StateEventType.ROOM_AVATAR -> false StateEventType.RoomAvatar -> false
StateEventType.ROOM_TOPIC -> false StateEventType.RoomTopic -> false
else -> lambdaError() else -> lambdaError()
} }
} }
@ -162,9 +162,9 @@ class RoomDetailsEditPresenterTest {
avatarUrl = AN_AVATAR_URL, avatarUrl = AN_AVATAR_URL,
canSendState = { stateEventType -> canSendState = { stateEventType ->
when (stateEventType) { when (stateEventType) {
StateEventType.ROOM_NAME -> false StateEventType.RoomName -> false
StateEventType.ROOM_AVATAR -> true StateEventType.RoomAvatar -> true
StateEventType.ROOM_TOPIC -> false StateEventType.RoomTopic -> false
else -> lambdaError() else -> lambdaError()
} }
} }
@ -194,9 +194,9 @@ class RoomDetailsEditPresenterTest {
avatarUrl = AN_AVATAR_URL, avatarUrl = AN_AVATAR_URL,
canSendState = { stateEventType -> canSendState = { stateEventType ->
when (stateEventType) { when (stateEventType) {
StateEventType.ROOM_NAME -> false StateEventType.RoomName -> false
StateEventType.ROOM_AVATAR -> false StateEventType.RoomAvatar -> false
StateEventType.ROOM_TOPIC -> true StateEventType.RoomTopic -> true
else -> lambdaError() else -> lambdaError()
} }
} }

View file

@ -44,9 +44,9 @@ data class SecurityAndPrivacyPermissions(
fun RoomPermissions.securityAndPrivacyPermissions(): SecurityAndPrivacyPermissions { fun RoomPermissions.securityAndPrivacyPermissions(): SecurityAndPrivacyPermissions {
return SecurityAndPrivacyPermissions( return SecurityAndPrivacyPermissions(
canChangeRoomAccess = canOwnUserSendState(StateEventType.ROOM_JOIN_RULES), canChangeRoomAccess = canOwnUserSendState(StateEventType.RoomJoinRules),
canChangeHistoryVisibility = canOwnUserSendState(StateEventType.ROOM_HISTORY_VISIBILITY), canChangeHistoryVisibility = canOwnUserSendState(StateEventType.RoomHistoryVisibility),
canChangeEncryption = canOwnUserSendState(StateEventType.ROOM_ENCRYPTION), canChangeEncryption = canOwnUserSendState(StateEventType.RoomEncryption),
canChangeRoomVisibility = canOwnUserSendState(StateEventType.ROOM_CANONICAL_ALIAS), canChangeRoomVisibility = canOwnUserSendState(StateEventType.RoomCanonicalAlias),
) )
} }

View file

@ -387,10 +387,10 @@ class SecurityAndPrivacyPresenterTest {
return FakeRoomPermissions( return FakeRoomPermissions(
canSendState = { eventType -> canSendState = { eventType ->
when (eventType) { when (eventType) {
StateEventType.ROOM_JOIN_RULES -> canChangeRoomAccess StateEventType.RoomJoinRules -> canChangeRoomAccess
StateEventType.ROOM_HISTORY_VISIBILITY -> canChangeHistoryVisibility StateEventType.RoomHistoryVisibility -> canChangeHistoryVisibility
StateEventType.ROOM_ENCRYPTION -> canChangeEncryption StateEventType.RoomEncryption -> canChangeEncryption
StateEventType.ROOM_CANONICAL_ALIAS -> canChangeRoomVisibility StateEventType.RoomCanonicalAlias -> canChangeRoomVisibility
else -> lambdaError() else -> lambdaError()
} }
} }

View file

@ -134,7 +134,7 @@ class UserProfilePresenterTest {
roomPermissions = FakeRoomPermissions( roomPermissions = FakeRoomPermissions(
canSendState = { type -> canSendState = { type ->
when (type) { when (type) {
StateEventType.CALL_MEMBER -> canUserJoinCall StateEventType.CallMember -> canUserJoinCall
else -> lambdaError() else -> lambdaError()
} }
} }

View file

@ -12,10 +12,21 @@ import androidx.compose.runtime.Immutable
@Immutable @Immutable
sealed interface MessageEventType { sealed interface MessageEventType {
data object Audio : MessageEventType
data object Beacon : MessageEventType
data object CallAnswer : MessageEventType data object CallAnswer : MessageEventType
data object CallCandidates : MessageEventType
data object CallInvite : MessageEventType data object CallInvite : MessageEventType
data object CallHangup : MessageEventType data object CallHangup : MessageEventType
data object CallCandidates : MessageEventType data object CallNegotiate : MessageEventType
data object CallNotify : MessageEventType
data object CallReject : MessageEventType
data object CallSdpStreamMetadataChanged : MessageEventType
data object CallSelectAnswer : MessageEventType
data object Emote : MessageEventType
data object Encrypted : MessageEventType
data object File : MessageEventType
data object Image : MessageEventType
data object RtcNotification : MessageEventType data object RtcNotification : MessageEventType
data object KeyVerificationReady : MessageEventType data object KeyVerificationReady : MessageEventType
data object KeyVerificationStart : MessageEventType data object KeyVerificationStart : MessageEventType
@ -24,10 +35,13 @@ sealed interface MessageEventType {
data object KeyVerificationKey : MessageEventType data object KeyVerificationKey : MessageEventType
data object KeyVerificationMac : MessageEventType data object KeyVerificationMac : MessageEventType
data object KeyVerificationDone : MessageEventType data object KeyVerificationDone : MessageEventType
data object Location : MessageEventType
data object Message : MessageEventType
data object Reaction : MessageEventType data object Reaction : MessageEventType
data object RoomEncrypted : MessageEventType data object RoomEncrypted : MessageEventType
data object RoomMessage : MessageEventType data object RoomMessage : MessageEventType
data object RoomRedaction : MessageEventType data object RoomRedaction : MessageEventType
data object RtcDecline : MessageEventType
data object Sticker : MessageEventType data object Sticker : MessageEventType
data object PollEnd : MessageEventType data object PollEnd : MessageEventType
data object PollResponse : MessageEventType data object PollResponse : MessageEventType
@ -35,5 +49,7 @@ sealed interface MessageEventType {
data object UnstablePollEnd : MessageEventType data object UnstablePollEnd : MessageEventType
data object UnstablePollResponse : MessageEventType data object UnstablePollResponse : MessageEventType
data object UnstablePollStart : MessageEventType data object UnstablePollStart : MessageEventType
data object Video : MessageEventType
data object Voice : MessageEventType
data class Other(val type: String) : MessageEventType data class Other(val type: String) : MessageEventType
} }

View file

@ -8,27 +8,33 @@
package io.element.android.libraries.matrix.api.room package io.element.android.libraries.matrix.api.room
enum class StateEventType { sealed interface StateEventType {
POLICY_RULE_ROOM, data object PolicyRuleRoom : StateEventType
POLICY_RULE_SERVER, data object PolicyRuleServer : StateEventType
POLICY_RULE_USER, data object PolicyRuleUser : StateEventType
CALL_MEMBER, data object CallMember : StateEventType
ROOM_ALIASES, data object RoomAliases : StateEventType
ROOM_AVATAR, data object RoomAvatar : StateEventType
ROOM_CANONICAL_ALIAS, data object RoomCanonicalAlias : StateEventType
ROOM_CREATE, data object RoomCreate : StateEventType
ROOM_ENCRYPTION, data object RoomEncryption : StateEventType
ROOM_GUEST_ACCESS, data object RoomGuestAccess : StateEventType
ROOM_HISTORY_VISIBILITY, data object RoomHistoryVisibility : StateEventType
ROOM_JOIN_RULES, data object RoomJoinRules : StateEventType
ROOM_MEMBER_EVENT, data object RoomMemberEvent : StateEventType
ROOM_NAME, data object RoomName : StateEventType
ROOM_PINNED_EVENTS, data object RoomPinnedEvents : StateEventType
ROOM_POWER_LEVELS, data object RoomPowerLevels : StateEventType
ROOM_SERVER_ACL, data object RoomServerAcl : StateEventType
ROOM_THIRD_PARTY_INVITE, data object RoomThirdPartyInvite : StateEventType
ROOM_TOMBSTONE, data object RoomTombstone : StateEventType
ROOM_TOPIC, data object RoomTopic : StateEventType
SPACE_CHILD, data object SpaceChild : StateEventType
SPACE_PARENT data object SpaceParent : StateEventType
data object BeaconInfo : StateEventType
data object MemberHints : StateEventType
data object RoomImagePack : StateEventType
data object RoomLanguage : StateEventType
data class Custom(val type: String) : StateEventType
} }

View file

@ -136,7 +136,7 @@ interface RoomPermissions : AutoCloseable {
* a power levels state event. * a power levels state event.
*/ */
fun RoomPermissions.canEditRolesAndPermissions(): Boolean { fun RoomPermissions.canEditRolesAndPermissions(): Boolean {
return canOwnUserSendState(StateEventType.ROOM_POWER_LEVELS) return canOwnUserSendState(StateEventType.RoomPowerLevels)
} }
/** /**
@ -144,7 +144,7 @@ fun RoomPermissions.canEditRolesAndPermissions(): Boolean {
* a call member state event. * a call member state event.
*/ */
fun RoomPermissions.canCall(): Boolean { fun RoomPermissions.canCall(): Boolean {
return canOwnUserSendState(StateEventType.CALL_MEMBER) return canOwnUserSendState(StateEventType.CallMember)
} }
fun <T> Result<RoomPermissions>.use(default: T, block: (RoomPermissions) -> T): T { fun <T> Result<RoomPermissions>.use(default: T, block: (RoomPermissions) -> T): T {

View file

@ -12,11 +12,21 @@ import io.element.android.libraries.matrix.api.room.MessageEventType
import org.matrix.rustcomponents.sdk.MessageLikeEventType import org.matrix.rustcomponents.sdk.MessageLikeEventType
fun MessageEventType.map(): MessageLikeEventType = when (this) { fun MessageEventType.map(): MessageLikeEventType = when (this) {
MessageEventType.Audio -> MessageLikeEventType.Audio
MessageEventType.Beacon -> MessageLikeEventType.Beacon
MessageEventType.CallAnswer -> MessageLikeEventType.CallAnswer MessageEventType.CallAnswer -> MessageLikeEventType.CallAnswer
MessageEventType.CallCandidates -> MessageLikeEventType.CallCandidates
MessageEventType.CallInvite -> MessageLikeEventType.CallInvite MessageEventType.CallInvite -> MessageLikeEventType.CallInvite
MessageEventType.CallHangup -> MessageLikeEventType.CallHangup MessageEventType.CallHangup -> MessageLikeEventType.CallHangup
MessageEventType.CallCandidates -> MessageLikeEventType.CallCandidates MessageEventType.CallNegotiate -> MessageLikeEventType.CallNegotiate
MessageEventType.RtcNotification -> MessageLikeEventType.RtcNotification MessageEventType.CallNotify -> MessageLikeEventType.CallNotify
MessageEventType.CallReject -> MessageLikeEventType.CallReject
MessageEventType.CallSdpStreamMetadataChanged -> MessageLikeEventType.CallSdpStreamMetadataChanged
MessageEventType.CallSelectAnswer -> MessageLikeEventType.CallSelectAnswer
MessageEventType.Emote -> MessageLikeEventType.Emote
MessageEventType.Encrypted -> MessageLikeEventType.Encrypted
MessageEventType.File -> MessageLikeEventType.File
MessageEventType.Image -> MessageLikeEventType.Image
MessageEventType.KeyVerificationReady -> MessageLikeEventType.KeyVerificationReady MessageEventType.KeyVerificationReady -> MessageLikeEventType.KeyVerificationReady
MessageEventType.KeyVerificationStart -> MessageLikeEventType.KeyVerificationStart MessageEventType.KeyVerificationStart -> MessageLikeEventType.KeyVerificationStart
MessageEventType.KeyVerificationCancel -> MessageLikeEventType.KeyVerificationCancel MessageEventType.KeyVerificationCancel -> MessageLikeEventType.KeyVerificationCancel
@ -24,17 +34,23 @@ fun MessageEventType.map(): MessageLikeEventType = when (this) {
MessageEventType.KeyVerificationKey -> MessageLikeEventType.KeyVerificationKey MessageEventType.KeyVerificationKey -> MessageLikeEventType.KeyVerificationKey
MessageEventType.KeyVerificationMac -> MessageLikeEventType.KeyVerificationMac MessageEventType.KeyVerificationMac -> MessageLikeEventType.KeyVerificationMac
MessageEventType.KeyVerificationDone -> MessageLikeEventType.KeyVerificationDone MessageEventType.KeyVerificationDone -> MessageLikeEventType.KeyVerificationDone
MessageEventType.Location -> MessageLikeEventType.Location
MessageEventType.Message -> MessageLikeEventType.Message
MessageEventType.Reaction -> MessageLikeEventType.Reaction MessageEventType.Reaction -> MessageLikeEventType.Reaction
MessageEventType.RoomEncrypted -> MessageLikeEventType.RoomEncrypted MessageEventType.RoomEncrypted -> MessageLikeEventType.RoomEncrypted
MessageEventType.RoomMessage -> MessageLikeEventType.RoomMessage MessageEventType.RoomMessage -> MessageLikeEventType.RoomMessage
MessageEventType.RoomRedaction -> MessageLikeEventType.RoomRedaction MessageEventType.RoomRedaction -> MessageLikeEventType.RoomRedaction
MessageEventType.RtcDecline -> MessageLikeEventType.RtcDecline
MessageEventType.Sticker -> MessageLikeEventType.Sticker MessageEventType.Sticker -> MessageLikeEventType.Sticker
MessageEventType.PollEnd -> MessageLikeEventType.PollEnd MessageEventType.PollEnd -> MessageLikeEventType.PollEnd
MessageEventType.PollResponse -> MessageLikeEventType.PollResponse MessageEventType.PollResponse -> MessageLikeEventType.PollResponse
MessageEventType.PollStart -> MessageLikeEventType.PollStart MessageEventType.PollStart -> MessageLikeEventType.PollStart
MessageEventType.RtcNotification -> MessageLikeEventType.RtcNotification
MessageEventType.UnstablePollEnd -> MessageLikeEventType.UnstablePollEnd MessageEventType.UnstablePollEnd -> MessageLikeEventType.UnstablePollEnd
MessageEventType.UnstablePollResponse -> MessageLikeEventType.UnstablePollResponse MessageEventType.UnstablePollResponse -> MessageLikeEventType.UnstablePollResponse
MessageEventType.UnstablePollStart -> MessageLikeEventType.UnstablePollStart MessageEventType.UnstablePollStart -> MessageLikeEventType.UnstablePollStart
MessageEventType.Video -> MessageLikeEventType.Video
MessageEventType.Voice -> MessageLikeEventType.Voice
is MessageEventType.Other -> MessageLikeEventType.Other(type) is MessageEventType.Other -> MessageLikeEventType.Other(type)
} }
@ -62,5 +78,21 @@ fun MessageLikeEventType.map(): MessageEventType = when (this) {
MessageLikeEventType.UnstablePollEnd -> MessageEventType.UnstablePollEnd MessageLikeEventType.UnstablePollEnd -> MessageEventType.UnstablePollEnd
MessageLikeEventType.UnstablePollResponse -> MessageEventType.UnstablePollResponse MessageLikeEventType.UnstablePollResponse -> MessageEventType.UnstablePollResponse
MessageLikeEventType.UnstablePollStart -> MessageEventType.UnstablePollStart MessageLikeEventType.UnstablePollStart -> MessageEventType.UnstablePollStart
MessageLikeEventType.Audio -> MessageEventType.Audio
MessageLikeEventType.Beacon -> MessageEventType.Beacon
MessageLikeEventType.CallNegotiate -> MessageEventType.CallNegotiate
MessageLikeEventType.CallNotify -> MessageEventType.CallNotify
MessageLikeEventType.CallReject -> MessageEventType.CallReject
MessageLikeEventType.CallSdpStreamMetadataChanged -> MessageEventType.CallSdpStreamMetadataChanged
MessageLikeEventType.CallSelectAnswer -> MessageEventType.CallSelectAnswer
MessageLikeEventType.Emote -> MessageEventType.Emote
MessageLikeEventType.Encrypted -> MessageEventType.Encrypted
MessageLikeEventType.File -> MessageEventType.File
MessageLikeEventType.Image -> MessageEventType.Image
MessageLikeEventType.Location -> MessageEventType.Location
MessageLikeEventType.Message -> MessageEventType.Message
MessageLikeEventType.RtcDecline -> MessageEventType.RtcDecline
MessageLikeEventType.Video -> MessageEventType.Video
MessageLikeEventType.Voice -> MessageEventType.Voice
is MessageLikeEventType.Other -> MessageEventType.Other(v1) is MessageLikeEventType.Other -> MessageEventType.Other(v1)
} }

View file

@ -12,51 +12,61 @@ import io.element.android.libraries.matrix.api.room.StateEventType
import org.matrix.rustcomponents.sdk.StateEventType as RustStateEventType import org.matrix.rustcomponents.sdk.StateEventType as RustStateEventType
fun StateEventType.map(): RustStateEventType = when (this) { fun StateEventType.map(): RustStateEventType = when (this) {
StateEventType.POLICY_RULE_ROOM -> RustStateEventType.POLICY_RULE_ROOM StateEventType.PolicyRuleRoom -> RustStateEventType.PolicyRuleRoom
StateEventType.POLICY_RULE_SERVER -> RustStateEventType.POLICY_RULE_SERVER StateEventType.PolicyRuleServer -> RustStateEventType.PolicyRuleServer
StateEventType.POLICY_RULE_USER -> RustStateEventType.POLICY_RULE_USER StateEventType.PolicyRuleUser -> RustStateEventType.PolicyRuleUser
StateEventType.CALL_MEMBER -> RustStateEventType.CALL_MEMBER StateEventType.CallMember -> RustStateEventType.CallMember
StateEventType.ROOM_ALIASES -> RustStateEventType.ROOM_ALIASES StateEventType.RoomAliases -> RustStateEventType.RoomAliases
StateEventType.ROOM_AVATAR -> RustStateEventType.ROOM_AVATAR StateEventType.RoomAvatar -> RustStateEventType.RoomAvatar
StateEventType.ROOM_CANONICAL_ALIAS -> RustStateEventType.ROOM_CANONICAL_ALIAS StateEventType.RoomCanonicalAlias -> RustStateEventType.RoomCanonicalAlias
StateEventType.ROOM_CREATE -> RustStateEventType.ROOM_CREATE StateEventType.RoomCreate -> RustStateEventType.RoomCreate
StateEventType.ROOM_ENCRYPTION -> RustStateEventType.ROOM_ENCRYPTION StateEventType.RoomEncryption -> RustStateEventType.RoomEncryption
StateEventType.ROOM_GUEST_ACCESS -> RustStateEventType.ROOM_GUEST_ACCESS StateEventType.RoomGuestAccess -> RustStateEventType.RoomGuestAccess
StateEventType.ROOM_HISTORY_VISIBILITY -> RustStateEventType.ROOM_HISTORY_VISIBILITY StateEventType.RoomHistoryVisibility -> RustStateEventType.RoomHistoryVisibility
StateEventType.ROOM_JOIN_RULES -> RustStateEventType.ROOM_JOIN_RULES StateEventType.RoomJoinRules -> RustStateEventType.RoomJoinRules
StateEventType.ROOM_MEMBER_EVENT -> RustStateEventType.ROOM_MEMBER_EVENT StateEventType.RoomMemberEvent -> RustStateEventType.RoomMemberEvent
StateEventType.ROOM_NAME -> RustStateEventType.ROOM_NAME StateEventType.RoomName -> RustStateEventType.RoomName
StateEventType.ROOM_PINNED_EVENTS -> RustStateEventType.ROOM_PINNED_EVENTS StateEventType.RoomPinnedEvents -> RustStateEventType.RoomPinnedEvents
StateEventType.ROOM_POWER_LEVELS -> RustStateEventType.ROOM_POWER_LEVELS StateEventType.RoomPowerLevels -> RustStateEventType.RoomPowerLevels
StateEventType.ROOM_SERVER_ACL -> RustStateEventType.ROOM_SERVER_ACL StateEventType.RoomServerAcl -> RustStateEventType.RoomServerAcl
StateEventType.ROOM_THIRD_PARTY_INVITE -> RustStateEventType.ROOM_THIRD_PARTY_INVITE StateEventType.RoomThirdPartyInvite -> RustStateEventType.RoomThirdPartyInvite
StateEventType.ROOM_TOMBSTONE -> RustStateEventType.ROOM_TOMBSTONE StateEventType.RoomTombstone -> RustStateEventType.RoomTombstone
StateEventType.ROOM_TOPIC -> RustStateEventType.ROOM_TOPIC StateEventType.RoomTopic -> RustStateEventType.RoomTopic
StateEventType.SPACE_CHILD -> RustStateEventType.SPACE_CHILD StateEventType.SpaceChild -> RustStateEventType.SpaceChild
StateEventType.SPACE_PARENT -> RustStateEventType.SPACE_PARENT StateEventType.SpaceParent -> RustStateEventType.SpaceParent
StateEventType.BeaconInfo -> RustStateEventType.BeaconInfo
StateEventType.MemberHints -> RustStateEventType.MemberHints
StateEventType.RoomImagePack -> RustStateEventType.RoomImagePack
StateEventType.RoomLanguage -> RustStateEventType.RoomLanguage
is StateEventType.Custom -> RustStateEventType.Custom(type)
} }
fun RustStateEventType.map(): StateEventType = when (this) { fun RustStateEventType.map(): StateEventType = when (this) {
RustStateEventType.POLICY_RULE_ROOM -> StateEventType.POLICY_RULE_ROOM RustStateEventType.PolicyRuleRoom -> StateEventType.PolicyRuleRoom
RustStateEventType.POLICY_RULE_SERVER -> StateEventType.POLICY_RULE_SERVER RustStateEventType.PolicyRuleServer -> StateEventType.PolicyRuleServer
RustStateEventType.POLICY_RULE_USER -> StateEventType.POLICY_RULE_USER RustStateEventType.PolicyRuleUser -> StateEventType.PolicyRuleUser
RustStateEventType.CALL_MEMBER -> StateEventType.CALL_MEMBER RustStateEventType.CallMember -> StateEventType.CallMember
RustStateEventType.ROOM_ALIASES -> StateEventType.ROOM_ALIASES RustStateEventType.RoomAliases -> StateEventType.RoomAliases
RustStateEventType.ROOM_AVATAR -> StateEventType.ROOM_AVATAR RustStateEventType.RoomAvatar -> StateEventType.RoomAvatar
RustStateEventType.ROOM_CANONICAL_ALIAS -> StateEventType.ROOM_CANONICAL_ALIAS RustStateEventType.RoomCanonicalAlias -> StateEventType.RoomCanonicalAlias
RustStateEventType.ROOM_CREATE -> StateEventType.ROOM_CREATE RustStateEventType.RoomCreate -> StateEventType.RoomCreate
RustStateEventType.ROOM_ENCRYPTION -> StateEventType.ROOM_ENCRYPTION RustStateEventType.RoomEncryption -> StateEventType.RoomEncryption
RustStateEventType.ROOM_GUEST_ACCESS -> StateEventType.ROOM_GUEST_ACCESS RustStateEventType.RoomGuestAccess -> StateEventType.RoomGuestAccess
RustStateEventType.ROOM_HISTORY_VISIBILITY -> StateEventType.ROOM_HISTORY_VISIBILITY RustStateEventType.RoomHistoryVisibility -> StateEventType.RoomHistoryVisibility
RustStateEventType.ROOM_JOIN_RULES -> StateEventType.ROOM_JOIN_RULES RustStateEventType.RoomJoinRules -> StateEventType.RoomJoinRules
RustStateEventType.ROOM_MEMBER_EVENT -> StateEventType.ROOM_MEMBER_EVENT RustStateEventType.RoomMemberEvent -> StateEventType.RoomMemberEvent
RustStateEventType.ROOM_NAME -> StateEventType.ROOM_NAME RustStateEventType.RoomName -> StateEventType.RoomName
RustStateEventType.ROOM_PINNED_EVENTS -> StateEventType.ROOM_PINNED_EVENTS RustStateEventType.RoomPinnedEvents -> StateEventType.RoomPinnedEvents
RustStateEventType.ROOM_POWER_LEVELS -> StateEventType.ROOM_POWER_LEVELS RustStateEventType.RoomPowerLevels -> StateEventType.RoomPowerLevels
RustStateEventType.ROOM_SERVER_ACL -> StateEventType.ROOM_SERVER_ACL RustStateEventType.RoomServerAcl -> StateEventType.RoomServerAcl
RustStateEventType.ROOM_THIRD_PARTY_INVITE -> StateEventType.ROOM_THIRD_PARTY_INVITE RustStateEventType.RoomThirdPartyInvite -> StateEventType.RoomThirdPartyInvite
RustStateEventType.ROOM_TOMBSTONE -> StateEventType.ROOM_TOMBSTONE RustStateEventType.RoomTombstone -> StateEventType.RoomTombstone
RustStateEventType.ROOM_TOPIC -> StateEventType.ROOM_TOPIC RustStateEventType.RoomTopic -> StateEventType.RoomTopic
RustStateEventType.SPACE_CHILD -> StateEventType.SPACE_CHILD RustStateEventType.SpaceChild -> StateEventType.SpaceChild
RustStateEventType.SPACE_PARENT -> StateEventType.SPACE_PARENT RustStateEventType.SpaceParent -> StateEventType.SpaceParent
RustStateEventType.BeaconInfo -> StateEventType.BeaconInfo
RustStateEventType.MemberHints -> StateEventType.MemberHints
RustStateEventType.RoomImagePack -> StateEventType.RoomImagePack
RustStateEventType.RoomLanguage -> StateEventType.RoomLanguage
is RustStateEventType.Custom -> StateEventType.Custom(value)
} }

View file

@ -32,7 +32,7 @@ import kotlinx.coroutines.test.runTest
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.NotificationClient import org.matrix.rustcomponents.sdk.NotificationClient
import org.matrix.rustcomponents.sdk.NotificationStatus import org.matrix.rustcomponents.sdk.NotificationStatus
import org.matrix.rustcomponents.sdk.TimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventContent
class RustNotificationServiceTest { class RustNotificationServiceTest {
@Test @Test
@ -58,9 +58,9 @@ class RustNotificationServiceTest {
@Test @Test
fun `test mapping invalid item only drops that item`() = runTest { fun `test mapping invalid item only drops that item`() = runTest {
val error = IllegalStateException("This event type is not supported") val error = IllegalStateException("This event content is not supported")
val faultyEvent = object : FakeFfiTimelineEvent() { val faultyEvent = object : FakeFfiTimelineEvent() {
override fun eventType(): TimelineEventType { override fun content(): TimelineEventContent {
throw error throw error
} }
} }

View file

@ -16,53 +16,55 @@ import org.matrix.rustcomponents.sdk.StateEventType as RustStateEventType
class StateEventTypeTest { class StateEventTypeTest {
@Test @Test
fun `mapping Rust type should work`() { fun `mapping Rust type should work`() {
assertThat(RustStateEventType.CALL_MEMBER.map()).isEqualTo(StateEventType.CALL_MEMBER) assertThat(RustStateEventType.CallMember.map()).isEqualTo(StateEventType.CallMember)
assertThat(RustStateEventType.POLICY_RULE_ROOM.map()).isEqualTo(StateEventType.POLICY_RULE_ROOM) assertThat(RustStateEventType.PolicyRuleRoom.map()).isEqualTo(StateEventType.PolicyRuleRoom)
assertThat(RustStateEventType.POLICY_RULE_SERVER.map()).isEqualTo(StateEventType.POLICY_RULE_SERVER) assertThat(RustStateEventType.PolicyRuleServer.map()).isEqualTo(StateEventType.PolicyRuleServer)
assertThat(RustStateEventType.POLICY_RULE_USER.map()).isEqualTo(StateEventType.POLICY_RULE_USER) assertThat(RustStateEventType.PolicyRuleUser.map()).isEqualTo(StateEventType.PolicyRuleUser)
assertThat(RustStateEventType.ROOM_ALIASES.map()).isEqualTo(StateEventType.ROOM_ALIASES) assertThat(RustStateEventType.RoomAliases.map()).isEqualTo(StateEventType.RoomAliases)
assertThat(RustStateEventType.ROOM_AVATAR.map()).isEqualTo(StateEventType.ROOM_AVATAR) assertThat(RustStateEventType.RoomAvatar.map()).isEqualTo(StateEventType.RoomAvatar)
assertThat(RustStateEventType.ROOM_CANONICAL_ALIAS.map()).isEqualTo(StateEventType.ROOM_CANONICAL_ALIAS) assertThat(RustStateEventType.RoomCanonicalAlias.map()).isEqualTo(StateEventType.RoomCanonicalAlias)
assertThat(RustStateEventType.ROOM_CREATE.map()).isEqualTo(StateEventType.ROOM_CREATE) assertThat(RustStateEventType.RoomCreate.map()).isEqualTo(StateEventType.RoomCreate)
assertThat(RustStateEventType.ROOM_ENCRYPTION.map()).isEqualTo(StateEventType.ROOM_ENCRYPTION) assertThat(RustStateEventType.RoomEncryption.map()).isEqualTo(StateEventType.RoomEncryption)
assertThat(RustStateEventType.ROOM_GUEST_ACCESS.map()).isEqualTo(StateEventType.ROOM_GUEST_ACCESS) assertThat(RustStateEventType.RoomGuestAccess.map()).isEqualTo(StateEventType.RoomGuestAccess)
assertThat(RustStateEventType.ROOM_HISTORY_VISIBILITY.map()).isEqualTo(StateEventType.ROOM_HISTORY_VISIBILITY) assertThat(RustStateEventType.RoomHistoryVisibility.map()).isEqualTo(StateEventType.RoomHistoryVisibility)
assertThat(RustStateEventType.ROOM_JOIN_RULES.map()).isEqualTo(StateEventType.ROOM_JOIN_RULES) assertThat(RustStateEventType.RoomJoinRules.map()).isEqualTo(StateEventType.RoomJoinRules)
assertThat(RustStateEventType.ROOM_MEMBER_EVENT.map()).isEqualTo(StateEventType.ROOM_MEMBER_EVENT) assertThat(RustStateEventType.RoomMemberEvent.map()).isEqualTo(StateEventType.RoomMemberEvent)
assertThat(RustStateEventType.ROOM_NAME.map()).isEqualTo(StateEventType.ROOM_NAME) assertThat(RustStateEventType.RoomName.map()).isEqualTo(StateEventType.RoomName)
assertThat(RustStateEventType.ROOM_PINNED_EVENTS.map()).isEqualTo(StateEventType.ROOM_PINNED_EVENTS) assertThat(RustStateEventType.RoomPinnedEvents.map()).isEqualTo(StateEventType.RoomPinnedEvents)
assertThat(RustStateEventType.ROOM_POWER_LEVELS.map()).isEqualTo(StateEventType.ROOM_POWER_LEVELS) assertThat(RustStateEventType.RoomPowerLevels.map()).isEqualTo(StateEventType.RoomPowerLevels)
assertThat(RustStateEventType.ROOM_SERVER_ACL.map()).isEqualTo(StateEventType.ROOM_SERVER_ACL) assertThat(RustStateEventType.RoomServerAcl.map()).isEqualTo(StateEventType.RoomServerAcl)
assertThat(RustStateEventType.ROOM_THIRD_PARTY_INVITE.map()).isEqualTo(StateEventType.ROOM_THIRD_PARTY_INVITE) assertThat(RustStateEventType.RoomThirdPartyInvite.map()).isEqualTo(StateEventType.RoomThirdPartyInvite)
assertThat(RustStateEventType.ROOM_TOMBSTONE.map()).isEqualTo(StateEventType.ROOM_TOMBSTONE) assertThat(RustStateEventType.RoomTombstone.map()).isEqualTo(StateEventType.RoomTombstone)
assertThat(RustStateEventType.ROOM_TOPIC.map()).isEqualTo(StateEventType.ROOM_TOPIC) assertThat(RustStateEventType.RoomTopic.map()).isEqualTo(StateEventType.RoomTopic)
assertThat(RustStateEventType.SPACE_CHILD.map()).isEqualTo(StateEventType.SPACE_CHILD) assertThat(RustStateEventType.SpaceChild.map()).isEqualTo(StateEventType.SpaceChild)
assertThat(RustStateEventType.SPACE_PARENT.map()).isEqualTo(StateEventType.SPACE_PARENT) assertThat(RustStateEventType.SpaceParent.map()).isEqualTo(StateEventType.SpaceParent)
assertThat(RustStateEventType.Custom("foo").map()).isEqualTo(StateEventType.Custom("foo"))
} }
@Test @Test
fun `mapping Kotlin type should work`() { fun `mapping Kotlin type should work`() {
assertThat(StateEventType.CALL_MEMBER.map()).isEqualTo(RustStateEventType.CALL_MEMBER) assertThat(StateEventType.CallMember.map()).isEqualTo(RustStateEventType.CallMember)
assertThat(StateEventType.POLICY_RULE_ROOM.map()).isEqualTo(RustStateEventType.POLICY_RULE_ROOM) assertThat(StateEventType.PolicyRuleRoom.map()).isEqualTo(RustStateEventType.PolicyRuleRoom)
assertThat(StateEventType.POLICY_RULE_SERVER.map()).isEqualTo(RustStateEventType.POLICY_RULE_SERVER) assertThat(StateEventType.PolicyRuleServer.map()).isEqualTo(RustStateEventType.PolicyRuleServer)
assertThat(StateEventType.POLICY_RULE_USER.map()).isEqualTo(RustStateEventType.POLICY_RULE_USER) assertThat(StateEventType.PolicyRuleUser.map()).isEqualTo(RustStateEventType.PolicyRuleUser)
assertThat(StateEventType.ROOM_ALIASES.map()).isEqualTo(RustStateEventType.ROOM_ALIASES) assertThat(StateEventType.RoomAliases.map()).isEqualTo(RustStateEventType.RoomAliases)
assertThat(StateEventType.ROOM_AVATAR.map()).isEqualTo(RustStateEventType.ROOM_AVATAR) assertThat(StateEventType.RoomAvatar.map()).isEqualTo(RustStateEventType.RoomAvatar)
assertThat(StateEventType.ROOM_CANONICAL_ALIAS.map()).isEqualTo(RustStateEventType.ROOM_CANONICAL_ALIAS) assertThat(StateEventType.RoomCanonicalAlias.map()).isEqualTo(RustStateEventType.RoomCanonicalAlias)
assertThat(StateEventType.ROOM_CREATE.map()).isEqualTo(RustStateEventType.ROOM_CREATE) assertThat(StateEventType.RoomCreate.map()).isEqualTo(RustStateEventType.RoomCreate)
assertThat(StateEventType.ROOM_ENCRYPTION.map()).isEqualTo(RustStateEventType.ROOM_ENCRYPTION) assertThat(StateEventType.RoomEncryption.map()).isEqualTo(RustStateEventType.RoomEncryption)
assertThat(StateEventType.ROOM_GUEST_ACCESS.map()).isEqualTo(RustStateEventType.ROOM_GUEST_ACCESS) assertThat(StateEventType.RoomGuestAccess.map()).isEqualTo(RustStateEventType.RoomGuestAccess)
assertThat(StateEventType.ROOM_HISTORY_VISIBILITY.map()).isEqualTo(RustStateEventType.ROOM_HISTORY_VISIBILITY) assertThat(StateEventType.RoomHistoryVisibility.map()).isEqualTo(RustStateEventType.RoomHistoryVisibility)
assertThat(StateEventType.ROOM_JOIN_RULES.map()).isEqualTo(RustStateEventType.ROOM_JOIN_RULES) assertThat(StateEventType.RoomJoinRules.map()).isEqualTo(RustStateEventType.RoomJoinRules)
assertThat(StateEventType.ROOM_MEMBER_EVENT.map()).isEqualTo(RustStateEventType.ROOM_MEMBER_EVENT) assertThat(StateEventType.RoomMemberEvent.map()).isEqualTo(RustStateEventType.RoomMemberEvent)
assertThat(StateEventType.ROOM_NAME.map()).isEqualTo(RustStateEventType.ROOM_NAME) assertThat(StateEventType.RoomName.map()).isEqualTo(RustStateEventType.RoomName)
assertThat(StateEventType.ROOM_PINNED_EVENTS.map()).isEqualTo(RustStateEventType.ROOM_PINNED_EVENTS) assertThat(StateEventType.RoomPinnedEvents.map()).isEqualTo(RustStateEventType.RoomPinnedEvents)
assertThat(StateEventType.ROOM_POWER_LEVELS.map()).isEqualTo(RustStateEventType.ROOM_POWER_LEVELS) assertThat(StateEventType.RoomPowerLevels.map()).isEqualTo(RustStateEventType.RoomPowerLevels)
assertThat(StateEventType.ROOM_SERVER_ACL.map()).isEqualTo(RustStateEventType.ROOM_SERVER_ACL) assertThat(StateEventType.RoomServerAcl.map()).isEqualTo(RustStateEventType.RoomServerAcl)
assertThat(StateEventType.ROOM_THIRD_PARTY_INVITE.map()).isEqualTo(RustStateEventType.ROOM_THIRD_PARTY_INVITE) assertThat(StateEventType.RoomThirdPartyInvite.map()).isEqualTo(RustStateEventType.RoomThirdPartyInvite)
assertThat(StateEventType.ROOM_TOMBSTONE.map()).isEqualTo(RustStateEventType.ROOM_TOMBSTONE) assertThat(StateEventType.RoomTombstone.map()).isEqualTo(RustStateEventType.RoomTombstone)
assertThat(StateEventType.ROOM_TOPIC.map()).isEqualTo(RustStateEventType.ROOM_TOPIC) assertThat(StateEventType.RoomTopic.map()).isEqualTo(RustStateEventType.RoomTopic)
assertThat(StateEventType.SPACE_CHILD.map()).isEqualTo(RustStateEventType.SPACE_CHILD) assertThat(StateEventType.SpaceChild.map()).isEqualTo(RustStateEventType.SpaceChild)
assertThat(StateEventType.SPACE_PARENT.map()).isEqualTo(RustStateEventType.SPACE_PARENT) assertThat(StateEventType.SpaceParent.map()).isEqualTo(RustStateEventType.SpaceParent)
assertThat(StateEventType.Custom("foo").map()).isEqualTo(RustStateEventType.Custom("foo"))
} }
} }