use ruma::{RoomId, events::AnySyncEphemeralRoomEvent, serde::Raw};
use tracing::info;
use super::Context;
pub fn dispatch(
context: &mut Context,
raw_events: &[Raw<AnySyncEphemeralRoomEvent>],
room_id: &RoomId,
) {
for raw_event in raw_events {
dispatch_receipt(context, raw_event, room_id);
}
}
pub(super) fn dispatch_receipt(
context: &mut Context,
raw_event: &Raw<AnySyncEphemeralRoomEvent>,
room_id: &RoomId,
) {
match raw_event.deserialize() {
Ok(AnySyncEphemeralRoomEvent::Receipt(event)) => {
context.state_changes.add_receipts(room_id, event.content);
}
Ok(_) => {}
Err(e) => {
let event_id = raw_event.get_field::<String>("event_id").ok().flatten();
info!(?room_id, event_id, "Failed to deserialize ephemeral room event: {e}");
}
}
}