Skip to content

Commit ca8b64e

Browse files
authored
feat: Change type of DecryptedRoomEvent::event to Raw<AnyTimelineEvent> (#5512)
- [x] Change `DecryptedRoomEvent::event` to `Raw<AnyTimelineEvent>` - [x] Update usages to pattern match on `AnyTimelineEvent::MessageLike` where necessary --------- Signed-off-by: kaylendog <[email protected]>
1 parent 140e751 commit ca8b64e

File tree

7 files changed

+48
-20
lines changed

7 files changed

+48
-20
lines changed

bindings/matrix-sdk-crypto-ffi/src/machine.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use ruma::{
3939
},
4040
events::{
4141
key::verification::VerificationMethod, room::message::MessageType, AnyMessageLikeEvent,
42-
AnySyncMessageLikeEvent, MessageLikeEvent,
42+
AnySyncMessageLikeEvent, AnyTimelineEvent, MessageLikeEvent,
4343
},
4444
serde::Raw,
4545
to_device::DeviceIdOrAllDevices,
@@ -902,7 +902,7 @@ impl OlmMachine {
902902
))?;
903903

904904
if handle_verification_events {
905-
if let Ok(e) = decrypted.event.deserialize() {
905+
if let Ok(AnyTimelineEvent::MessageLike(e)) = decrypted.event.deserialize() {
906906
match &e {
907907
AnyMessageLikeEvent::RoomMessage(MessageLikeEvent::Original(
908908
original_event,

crates/matrix-sdk-base/src/event_cache/store/integration_tests.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use ruma::{
3333
api::client::media::get_content_thumbnail::v3::Method,
3434
event_id,
3535
events::{
36+
AnyMessageLikeEvent, AnyTimelineEvent,
3637
relation::RelationType,
3738
room::{MediaSource, message::RoomMessageEventContentWithoutRelation},
3839
},
@@ -105,7 +106,7 @@ pub fn check_test_event(event: &TimelineEvent, text: &str) {
105106

106107
// Check event.
107108
let deserialized = d.event.deserialize().unwrap();
108-
assert_matches!(deserialized, ruma::events::AnyMessageLikeEvent::RoomMessage(msg) => {
109+
assert_matches!(deserialized, AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(msg)) => {
109110
assert_eq!(msg.as_original().unwrap().content.body(), text);
110111
});
111112
});

crates/matrix-sdk-common/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@ All notable changes to this project will be documented in this file.
66

77
## [Unreleased] - ReleaseDate
88

9+
### Features
10+
11+
- [**breaking**] Use `Raw<AnyTimelineEvent>` in place of `Raw<AnyMessageLikeEvent>`
12+
in `DecryptedRoomEvent::event`.
13+
([#5512](https://github.com/matrix-org/matrix-rust-sdk/pull/5512/files)).
14+
Affects the following functions:
15+
- `OlmMachine::decrypt_room_event` - existing matches on the result's event field
16+
should be updated to `AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::...)`
17+
918
## [0.13.0] - 2025-07-10
1019

1120
### Features

crates/matrix-sdk-common/src/deserialized_responses.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414

1515
use std::{collections::BTreeMap, fmt, sync::Arc};
1616

17-
#[cfg(doc)]
18-
use ruma::events::AnyTimelineEvent;
1917
use ruma::{
2018
DeviceKeyAlgorithm, OwnedDeviceId, OwnedEventId, OwnedUserId,
2119
events::{
22-
AnyMessageLikeEvent, AnySyncMessageLikeEvent, AnySyncTimelineEvent, AnyToDeviceEvent,
20+
AnySyncMessageLikeEvent, AnySyncTimelineEvent, AnyTimelineEvent, AnyToDeviceEvent,
2321
MessageLikeEventType,
2422
},
2523
push::Action,
@@ -651,7 +649,7 @@ impl TimelineEvent {
651649
}
652650

653651
/// Replace the raw event included in this item by another one.
654-
pub fn replace_raw(&mut self, replacement: Raw<AnyMessageLikeEvent>) {
652+
pub fn replace_raw(&mut self, replacement: Raw<AnyTimelineEvent>) {
655653
match &mut self.kind {
656654
TimelineEventKind::Decrypted(decrypted) => decrypted.event = replacement,
657655
TimelineEventKind::UnableToDecrypt { event, .. }
@@ -839,11 +837,12 @@ impl fmt::Debug for TimelineEventKind {
839837
pub struct DecryptedRoomEvent {
840838
/// The decrypted event.
841839
///
842-
/// Note: it's not an error that this contains an `AnyMessageLikeEvent`: an
840+
/// Note: it's not an error that this contains an [`AnyTimelineEvent`]
841+
/// (as opposed to an [`AnySyncTimelineEvent`]): an
843842
/// encrypted payload *always contains* a room id, by the [spec].
844843
///
845844
/// [spec]: https://spec.matrix.org/v1.12/client-server-api/#mmegolmv1aes-sha2
846-
pub event: Raw<AnyMessageLikeEvent>,
845+
pub event: Raw<AnyTimelineEvent>,
847846

848847
/// The encryption info about the event.
849848
pub encryption_info: Arc<EncryptionInfo>,

crates/matrix-sdk-crypto/src/machine/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use ruma::{
4545
assign,
4646
events::{
4747
secret::request::SecretName, AnyMessageLikeEvent, AnyMessageLikeEventContent,
48-
AnyToDeviceEvent, MessageLikeEventContent,
48+
AnyTimelineEvent, AnyToDeviceEvent, MessageLikeEventContent,
4949
},
5050
serde::{JsonObject, Raw},
5151
DeviceId, MilliSecondsSinceUnixEpoch, OneTimeKeyAlgorithm, OwnedDeviceId, OwnedDeviceKeyId,
@@ -2197,7 +2197,7 @@ impl OlmMachine {
21972197
.await;
21982198
}
21992199

2200-
let event = serde_json::from_value::<Raw<AnyMessageLikeEvent>>(decrypted_event.into())?;
2200+
let event = serde_json::from_value::<Raw<AnyTimelineEvent>>(decrypted_event.into())?;
22012201

22022202
Ok(DecryptedRoomEvent { event, encryption_info, unsigned_encryption_info })
22032203
}

crates/matrix-sdk-crypto/src/machine/tests/mod.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ use ruma::{
3636
room::message::{
3737
AddMentions, MessageType, Relation, ReplyWithinThread, RoomMessageEventContent,
3838
},
39-
AnyMessageLikeEvent, AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnyToDeviceEvent,
40-
MessageLikeEvent, OriginalMessageLikeEvent, ToDeviceEventType,
39+
AnyMessageLikeEvent, AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnyTimelineEvent,
40+
AnyToDeviceEvent, MessageLikeEvent, OriginalMessageLikeEvent, ToDeviceEventType,
4141
},
4242
room_id,
4343
serde::Raw,
@@ -706,8 +706,8 @@ async fn test_megolm_encryption() {
706706
assert_let!(RoomEventDecryptionResult::Decrypted(decrypted_event) = decryption_result);
707707
let decrypted_event = decrypted_event.event.deserialize().unwrap();
708708

709-
if let AnyMessageLikeEvent::RoomMessage(MessageLikeEvent::Original(
710-
OriginalMessageLikeEvent { sender, content, .. },
709+
if let AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(
710+
MessageLikeEvent::Original(OriginalMessageLikeEvent { sender, content, .. }),
711711
)) = decrypted_event
712712
{
713713
assert_eq!(&sender, alice.user_id());
@@ -1490,7 +1490,10 @@ async fn test_unsigned_decryption() {
14901490
bob.decrypt_room_event(&raw_encrypted_event, room_id, &decryption_settings).await.unwrap();
14911491

14921492
let decrypted_event = raw_decrypted_event.event.deserialize().unwrap();
1493-
assert_matches!(decrypted_event, AnyMessageLikeEvent::RoomMessage(first_message));
1493+
assert_matches!(
1494+
decrypted_event,
1495+
AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(first_message))
1496+
);
14941497

14951498
let first_message = first_message.as_original().unwrap();
14961499
assert_eq!(first_message.content.body(), first_message_text);
@@ -1539,7 +1542,10 @@ async fn test_unsigned_decryption() {
15391542
bob.decrypt_room_event(&raw_encrypted_event, room_id, &decryption_settings).await.unwrap();
15401543

15411544
let decrypted_event = raw_decrypted_event.event.deserialize().unwrap();
1542-
assert_matches!(decrypted_event, AnyMessageLikeEvent::RoomMessage(first_message));
1545+
assert_matches!(
1546+
decrypted_event,
1547+
AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(first_message))
1548+
);
15431549

15441550
let first_message = first_message.as_original().unwrap();
15451551
assert_eq!(first_message.content.body(), first_message_text);
@@ -1588,7 +1594,10 @@ async fn test_unsigned_decryption() {
15881594
bob.decrypt_room_event(&raw_encrypted_event, room_id, &decryption_settings).await.unwrap();
15891595

15901596
let decrypted_event = raw_decrypted_event.event.deserialize().unwrap();
1591-
assert_matches!(decrypted_event, AnyMessageLikeEvent::RoomMessage(first_message));
1597+
assert_matches!(
1598+
decrypted_event,
1599+
AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(first_message))
1600+
);
15921601

15931602
let first_message = first_message.as_original().unwrap();
15941603
assert_eq!(first_message.content.body(), first_message_text);
@@ -1649,7 +1658,10 @@ async fn test_unsigned_decryption() {
16491658
bob.decrypt_room_event(&raw_encrypted_event, room_id, &decryption_settings).await.unwrap();
16501659

16511660
let decrypted_event = raw_decrypted_event.event.deserialize().unwrap();
1652-
assert_matches!(decrypted_event, AnyMessageLikeEvent::RoomMessage(first_message));
1661+
assert_matches!(
1662+
decrypted_event,
1663+
AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(first_message))
1664+
);
16531665

16541666
let first_message = first_message.as_original().unwrap();
16551667
assert_eq!(first_message.content.body(), first_message_text);
@@ -1705,7 +1717,10 @@ async fn test_unsigned_decryption() {
17051717
bob.decrypt_room_event(&raw_encrypted_event, room_id, &decryption_settings).await.unwrap();
17061718

17071719
let decrypted_event = raw_decrypted_event.event.deserialize().unwrap();
1708-
assert_matches!(decrypted_event, AnyMessageLikeEvent::RoomMessage(first_message));
1720+
assert_matches!(
1721+
decrypted_event,
1722+
AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(first_message))
1723+
);
17091724

17101725
let first_message = first_message.as_original().unwrap();
17111726
assert_eq!(first_message.content.body(), first_message_text);

crates/matrix-sdk/src/test_utils/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,10 @@ macro_rules! assert_decrypted_message_eq {
256256
.deserialize()
257257
.expect("We should be able to deserialize the decrypted event");
258258

259+
assert_matches2::assert_let!(
260+
$crate::ruma::events::AnyTimelineEvent::MessageLike(deserialized_event) = deserialized_event
261+
);
262+
259263
let content =
260264
deserialized_event.original_content().expect("The event should not have been redacted");
261265
assert_matches2::assert_let!($crate::ruma::events::AnyMessageLikeEventContent::RoomMessage(content) = content);

0 commit comments

Comments
 (0)