matrix_sdk_ffi/timeline/
configuration.rs1use ruma::EventId;
2
3use super::FocusEventError;
4use crate::{error::ClientError, event::RoomMessageEventMessageType};
5
6#[derive(uniffi::Enum)]
7pub enum TimelineFocus {
8 Live,
9 Event { event_id: String, num_context_events: u16 },
10 PinnedEvents { max_events_to_load: u16, max_concurrent_requests: u16 },
11}
12
13impl TryFrom<TimelineFocus> for matrix_sdk_ui::timeline::TimelineFocus {
14 type Error = ClientError;
15
16 fn try_from(
17 value: TimelineFocus,
18 ) -> Result<matrix_sdk_ui::timeline::TimelineFocus, Self::Error> {
19 match value {
20 TimelineFocus::Live => Ok(Self::Live),
21 TimelineFocus::Event { event_id, num_context_events } => {
22 let parsed_event_id =
23 EventId::parse(&event_id).map_err(|err| FocusEventError::InvalidEventId {
24 event_id: event_id.clone(),
25 err: err.to_string(),
26 })?;
27
28 Ok(Self::Event { target: parsed_event_id, num_context_events })
29 }
30 TimelineFocus::PinnedEvents { max_events_to_load, max_concurrent_requests } => {
31 Ok(Self::PinnedEvents { max_events_to_load, max_concurrent_requests })
32 }
33 }
34 }
35}
36
37#[derive(uniffi::Enum)]
40pub enum DateDividerMode {
41 Daily,
42 Monthly,
43}
44
45impl From<DateDividerMode> for matrix_sdk_ui::timeline::DateDividerMode {
46 fn from(value: DateDividerMode) -> Self {
47 match value {
48 DateDividerMode::Daily => Self::Daily,
49 DateDividerMode::Monthly => Self::Monthly,
50 }
51 }
52}
53
54#[derive(uniffi::Enum)]
55pub enum AllowedMessageTypes {
56 All,
57 Only { types: Vec<RoomMessageEventMessageType> },
58}
59
60#[derive(uniffi::Record)]
70pub struct TimelineConfiguration {
71 pub focus: TimelineFocus,
73
74 pub allowed_message_types: AllowedMessageTypes,
77
78 pub internal_id_prefix: Option<String>,
82
83 pub date_divider_mode: DateDividerMode,
85}