ruma_client_api/
delayed_events.rs1pub mod get_all_delayed_events;
6pub mod get_delayed_event;
7pub mod send_delayed_event;
8pub mod update_delayed_event;
9
10pub mod delayed_message_event;
12pub mod delayed_state_event;
13
14use std::time::Duration;
15
16use ruma_common::{
17 MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId,
18 api::error::StandardErrorBody,
19 serde::{Raw, StringEnum},
20};
21use ruma_events::{AnyTimelineEventContent, TimelineEventType};
22use serde::{Deserialize, Serialize};
23
24use crate::PrivOwnedStr;
25
26#[derive(Clone, Debug, Serialize, Deserialize)]
28#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
29pub struct DelayedEventData {
30 pub delay_id: String,
32
33 pub room_id: OwnedRoomId,
35
36 #[serde(rename = "type")]
38 pub event_type: TimelineEventType,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub state_key: Option<String>,
43
44 pub content: Raw<AnyTimelineEventContent>,
49
50 #[serde(with = "ruma_common::serde::duration::ms")]
52 pub delay: Duration,
53
54 pub running_since: MilliSecondsSinceUnixEpoch,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
60 pub error: Option<StandardErrorBody>,
61
62 #[serde(skip_serializing_if = "Option::is_none")]
65 pub event_id: Option<OwnedEventId>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
70 #[serde(rename = "finalised_ts")]
71 pub finalized_ts: Option<MilliSecondsSinceUnixEpoch>,
72}
73
74impl DelayedEventData {
75 pub fn new(
77 delay_id: String,
78 room_id: OwnedRoomId,
79 event_type: TimelineEventType,
80 state_key: Option<String>,
81 content: Raw<AnyTimelineEventContent>,
82 delay: Duration,
83 running_since: MilliSecondsSinceUnixEpoch,
84 ) -> Self {
85 Self {
86 delay_id,
87 room_id,
88 event_type,
89 state_key,
90 delay,
91 running_since,
92 content,
93 error: None,
94 event_id: None,
95 finalized_ts: None,
96 }
97 }
98
99 pub fn status(&self) -> DelayedEventStatus {
101 if self.finalized_ts.is_none() {
102 DelayedEventStatus::Scheduled
103 } else if self.event_id.is_some() {
104 DelayedEventStatus::Send
105 } else if self.error.is_some() {
106 DelayedEventStatus::Error
107 } else {
108 DelayedEventStatus::Cancel
109 }
110 }
111}
112
113#[doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/doc/string_enum.md"))]
115#[derive(Clone, StringEnum)]
116#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
117#[ruma_enum(rename_all = "snake_case")]
118pub enum DelayedEventStatus {
119 Scheduled,
122
123 Send,
125
126 Cancel,
128
129 Error,
131
132 #[doc(hidden)]
133 _Custom(PrivOwnedStr),
134}
135
136#[derive(Clone, Debug, Serialize, Deserialize)]
141#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
142#[serde(untagged)]
143pub enum DelayParameters {
144 Timeout {
147 #[serde(with = "ruma_common::serde::duration::ms")]
149 #[serde(rename = "org.matrix.msc4140.delay")]
150 timeout: Duration,
151 },
152}