mirror of
https://gitlab.com/famedly/conduit.git
synced 2025-07-27 17:28:36 +00:00
draft: RoomEventFilter
This commit is contained in:
parent
11990e7524
commit
624d1fcc9a
6 changed files with 103 additions and 2 deletions
48
src/utils/filter.rs
Normal file
48
src/utils/filter.rs
Normal file
|
@ -0,0 +1,48 @@
|
|||
use ruma::{api::client::filter::RoomEventFilter, events::AnyTimelineEvent, serde::Raw};
|
||||
|
||||
pub fn filter_room_events<I: Iterator<Item = &Raw<AnyTimelineEvent>>>(
|
||||
events: I,
|
||||
filter: RoomEventFilter,
|
||||
) {
|
||||
events
|
||||
.filter(|event| match &filter.types {
|
||||
None => true,
|
||||
Some(types) => types.iter().any(|t| {
|
||||
t.as_str()
|
||||
== event
|
||||
.get_field::<String>("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::<String>("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::<String>("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::<String>("room_id")
|
||||
.expect("room events should deserialize")
|
||||
.expect("room events should have a type")
|
||||
}),
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue