ruma_client_api/delayed_events/
get_delayed_event.rs1pub mod unstable {
6 use ruma_common::{
11 api::{auth_scheme::AccessToken, request, response},
12 metadata,
13 };
14
15 use crate::delayed_events::DelayedEventData;
16
17 metadata! {
18 method: GET,
19 rate_limited: true,
20 authentication: AccessToken,
21 history: {
22 unstable("org.matrix.msc4140") => "/_matrix/client/unstable/org.matrix.msc4140/delayed_events/{delay_id}",
23 }
24 }
25
26 #[request]
29 pub struct Request {
30 #[ruma_api(path)]
32 pub delay_id: String,
33 }
34
35 #[response]
38 pub struct Response {
39 #[ruma_api(body)]
41 pub delayed_event: DelayedEventData,
42 }
43
44 impl Request {
45 pub fn new(delay_id: String) -> Self {
47 Self { delay_id }
48 }
49 }
50
51 impl Response {
52 pub fn new(delayed_event: DelayedEventData) -> Self {
54 Self { delayed_event }
55 }
56 }
57
58 impl From<DelayedEventData> for Response {
59 fn from(delayed_event: DelayedEventData) -> Self {
60 Self { delayed_event }
61 }
62 }
63
64 #[cfg(all(test, feature = "server"))]
65 mod server_tests {
66 use std::time::Duration;
67
68 use js_int::UInt;
69 use ruma_common::{
70 MilliSecondsSinceUnixEpoch, api::OutgoingResponse, owned_event_id, owned_room_id,
71 serde::Raw,
72 };
73 use ruma_events::TimelineEventType;
74 use serde_json::{Value as JsonValue, json};
75
76 use super::Response;
77 use crate::delayed_events::DelayedEventData;
78
79 #[test]
80 fn serialize_get_delayed_event_response() {
81 let content = json!({
82 "topic": "test topic"
83 })
84 .to_string();
85
86 let mut event_data = DelayedEventData::new(
87 "a_delay_id".to_owned(),
88 owned_room_id!("!roomid:example.org"),
89 TimelineEventType::RoomTopic,
90 Some("a_state_key".to_owned()),
91 Raw::from_json_string(content).unwrap(),
92 Duration::from_millis(103),
93 MilliSecondsSinceUnixEpoch(UInt::new(70000).unwrap()),
94 );
95 event_data.event_id = Some(owned_event_id!("$event:imaginary.hs"));
96 event_data.finalized_ts = Some(MilliSecondsSinceUnixEpoch(UInt::new(70103).unwrap()));
97
98 let response: http::Response<Vec<u8>> =
99 Response::new(event_data).try_into_http_response().unwrap();
100
101 assert_eq!(
102 json!({
103 "content": {
104 "topic": "test topic"
105 },
106 "delay": 103,
107 "delay_id": "a_delay_id",
108 "event_id": "$event:imaginary.hs",
109 "finalised_ts": 70103,
110 "room_id": "!roomid:example.org",
111 "running_since": 70000,
112 "state_key": "a_state_key",
113 "type": "m.room.topic"
114 }),
115 serde_json::from_slice::<JsonValue>(response.body()).unwrap()
116 );
117 }
118 }
119
120 #[cfg(all(test, feature = "client"))]
121 mod client_tests {
122 use std::time::Duration;
123
124 use js_int::UInt;
125 use ruma_common::{
126 MilliSecondsSinceUnixEpoch, api::IncomingResponse, owned_event_id, owned_room_id,
127 };
128 use ruma_events::TimelineEventType;
129 use serde_json::{Value as JsonValue, json};
130
131 use super::Response;
132
133 #[test]
134 fn deserialize_get_delayed_event_request() {
135 let body = json!({
136 "content": {
137 "topic": "test topic"
138 },
139 "delay": 103,
140 "delay_id": "a_delay_id",
141 "event_id": "$event:imaginary.hs",
142 "finalised_ts": 70103,
143 "room_id": "!roomid:example.org",
144 "running_since": 70000,
145 "state_key": "a_state_key",
146 "type": "m.room.topic"
147 })
148 .to_string();
149
150 let res =
151 Response::try_from_http_response(http::Response::builder().body(body).unwrap())
152 .unwrap()
153 .delayed_event;
154
155 let content = json!({
156 "topic": "test topic"
157 });
158
159 assert_eq!(res.delay_id, "a_delay_id".to_owned());
160 assert_eq!(res.room_id, owned_room_id!("!roomid:example.org"));
161 assert_eq!(res.event_type, TimelineEventType::RoomTopic);
162 assert_eq!(res.state_key, Some("a_state_key".to_owned()));
163 assert_eq!(res.delay, Duration::from_millis(103));
164 assert_eq!(res.running_since, MilliSecondsSinceUnixEpoch(UInt::new(70000).unwrap()));
165 assert_eq!(
166 serde_json::from_str::<JsonValue>(res.content.json().get()).unwrap(),
167 content
168 );
169 assert!(res.error.is_none());
170 assert_eq!(res.event_id, Some(owned_event_id!("$event:imaginary.hs")));
171 assert_eq!(
172 res.finalized_ts,
173 Some(MilliSecondsSinceUnixEpoch(UInt::new(70103).unwrap()))
174 );
175 }
176 }
177}