use ruma::{api::client::filter::RoomEventFilter, events::AnyTimelineEvent, serde::Raw}; pub fn filter_room_events>>( events: I, filter: RoomEventFilter, ) { events .filter(|event| match &filter.types { None => true, Some(types) => types.iter().any(|t| { t.as_str() == event .get_field::("type") .expect("room events should deserialize") .expect("room events should have a type") }), }) .filter(|event| match &filter.not_types[..] { [] => true, not_types => not_types.iter().all(|t| { t.as_str() != event .get_field::("type") .expect("room events should deserialize") .expect("room events should have a type") }), }) .filter(|event| match &filter.rooms { None => true, Some(rooms) => rooms.iter().any(|r| { r.as_str() == event .get_field::("room_id") .expect("room events should deserialize") .expect("room events should have a type") }), }) .filter(|event| match &filter.rooms { None => true, Some(rooms) => rooms.iter().all(|r| { r.as_str() != event .get_field::("room_id") .expect("room events should deserialize") .expect("room events should have a type") }), }); }