ruma_client_api/rtc/livekit/
delegate_delayed_leave.rs1pub mod v1 {
6 use ruma_common::{
11 OwnedRoomId,
12 api::{auth_scheme::AccessToken, request, response},
13 metadata,
14 };
15
16 metadata! {
17 method: POST,
18 rate_limited: true,
19 authentication: AccessToken,
20 history: {
21 unstable => "/_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave",
22 }
23 }
24
25 #[request]
27 pub struct Request {
28 pub url: String,
30
31 pub room_id: OwnedRoomId,
33
34 pub slot_id: String,
36
37 pub member_id: String,
39
40 pub delay_id: String,
42 }
43
44 impl Request {
45 pub fn new(
48 url: String,
49 room_id: OwnedRoomId,
50 slot_id: String,
51 member_id: String,
52 delay_id: String,
53 ) -> Self {
54 Self { url, room_id, slot_id, member_id, delay_id }
55 }
56 }
57
58 #[response]
60 pub struct Response {}
61
62 impl Response {
63 pub fn new() -> Self {
65 Self {}
66 }
67 }
68
69 #[cfg(all(test, feature = "client"))]
70 mod tests {
71 use std::borrow::Cow;
72
73 use ruma_common::{
74 api::{OutgoingRequestExt as _, SupportedVersions, auth_scheme::SendAccessToken},
75 owned_room_id,
76 };
77 use serde_json::json;
78
79 use super::Request;
80
81 #[test]
82 fn serialize_request() {
83 let request = Request::new(
84 "wss://livekit.example.com".to_owned(),
85 owned_room_id!("!tDLCaLXijNtYcJZEey:example.com"),
86 "the_id".to_owned(),
87 "xyzABCDEF10123".to_owned(),
88 "1234567890".to_owned(),
89 );
90
91 let supported =
92 SupportedVersions { versions: Default::default(), features: Default::default() };
93
94 let (parts, body) = request
95 .try_into_http_request::<Vec<u8>>(
96 "https://homeserver.tld",
97 SendAccessToken::IfRequired("auth_tok"),
98 Cow::Owned(supported),
99 )
100 .unwrap()
101 .into_parts();
102 let body: serde_json::Value = serde_json::from_slice(&body).unwrap();
103
104 assert_eq!("POST", parts.method.as_str());
105 assert_eq!(
106 "https://homeserver.tld/_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave",
107 parts.uri.to_string()
108 );
109 assert_eq!(
110 body,
111 json!({
112 "url": "wss://livekit.example.com",
113 "room_id": "!tDLCaLXijNtYcJZEey:example.com",
114 "slot_id": "the_id",
115 "member_id": "xyzABCDEF10123",
116 "delay_id": "1234567890",
117 })
118 );
119 }
120 }
121
122 #[cfg(all(test, feature = "server"))]
123 mod server_tests {
124 use ruma_common::api::IncomingRequestExt as _;
125
126 use super::Request;
127
128 #[test]
129 fn deserialize_request() {
130 let request = http::Request::builder()
131 .method("POST")
132 .uri(
133 "/_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave",
134 )
135 .body(
136 br#"{
137 "url": "wss://livekit.example.org",
138 "room_id": "!tDLCaLXijNtYcJZEey:example.org",
139 "slot_id": "the_id",
140 "member_id": "xyzABCDEF10123",
141 "delay_id": "1234567890"
142 }"# as &[u8],
143 )
144 .unwrap();
145
146 let request = Request::try_from_http_request(request, &[] as &[&str]).unwrap();
147
148 assert_eq!(request.url, "wss://livekit.example.org");
149 assert_eq!(request.room_id, "!tDLCaLXijNtYcJZEey:example.org");
150 assert_eq!(request.slot_id, "the_id");
151 assert_eq!(request.member_id, "xyzABCDEF10123");
152 assert_eq!(request.delay_id, "1234567890");
153 }
154 }
155}