matrix_sdk_ffi/
timeline_event_filter.rs1use std::sync::Arc;
2
3use matrix_sdk_ui::timeline::event_type_filter::TimelineEventTypeFilter as InnerTimelineEventTypeFilter;
4use ruma::events::{AnySyncTimelineEvent, TimelineEventType};
5
6use crate::event::{MessageLikeEventType, StateEventType};
7
8#[derive(uniffi::Object)]
9pub struct TimelineEventTypeFilter {
10 inner: InnerTimelineEventTypeFilter,
11}
12
13#[matrix_sdk_ffi_macros::export]
14impl TimelineEventTypeFilter {
15 #[uniffi::constructor]
16 pub fn include(event_types: Vec<FilterTimelineEventType>) -> Arc<Self> {
17 let event_types: Vec<TimelineEventType> =
18 event_types.iter().map(|t| t.clone().into()).collect();
19 Arc::new(Self { inner: InnerTimelineEventTypeFilter::Include(event_types) })
20 }
21
22 #[uniffi::constructor]
23 pub fn exclude(event_types: Vec<FilterTimelineEventType>) -> Arc<Self> {
24 let event_types: Vec<TimelineEventType> =
25 event_types.iter().map(|t| t.clone().into()).collect();
26 Arc::new(Self { inner: InnerTimelineEventTypeFilter::Exclude(event_types) })
27 }
28}
29
30impl TimelineEventTypeFilter {
31 pub(crate) fn filter(&self, event: &AnySyncTimelineEvent) -> bool {
34 self.inner.filter(event)
35 }
36}
37
38#[derive(uniffi::Enum, Clone)]
39pub enum FilterTimelineEventType {
40 MessageLike { event_type: MessageLikeEventType },
41 State { event_type: StateEventType },
42}
43
44impl From<FilterTimelineEventType> for TimelineEventType {
45 fn from(value: FilterTimelineEventType) -> TimelineEventType {
46 match value {
47 FilterTimelineEventType::MessageLike { event_type } => {
48 ruma::events::MessageLikeEventType::from(event_type).into()
49 }
50 FilterTimelineEventType::State { event_type } => {
51 ruma::events::StateEventType::from(event_type).into()
52 }
53 }
54 }
55}