ruma_federation_api/rtc/livekit/
get_token.rs1pub mod msc4195 {
6 use ruma_common::{
11 OwnedRoomId, OwnedUserId,
12 api::{request, response},
13 metadata,
14 };
15
16 use crate::authentication::ServerSignatures;
17
18 metadata! {
19 method: POST,
20 rate_limited: false,
21 authentication: ServerSignatures,
22 path: "/_matrix/federation/unstable/io.element.msc4195/rtc/livekit/get_token",
23 }
24
25 #[request]
27 pub struct Request {
28 pub user_id: OwnedUserId,
32
33 pub url: String,
35
36 pub room_id: OwnedRoomId,
38
39 pub slot_id: String,
41
42 pub member_id: String,
44 }
45
46 impl Request {
47 pub fn new(
50 user_id: OwnedUserId,
51 url: String,
52 room_id: OwnedRoomId,
53 slot_id: String,
54 member_id: String,
55 ) -> Self {
56 Self { user_id, url, room_id, slot_id, member_id }
57 }
58 }
59
60 #[response]
62 pub struct Response {
63 pub jwt: String,
65 }
66
67 impl Response {
68 pub fn new(jwt: String) -> Self {
71 Self { jwt }
72 }
73 }
74
75 #[cfg(all(test, feature = "server"))]
76 mod server_tests {
77 use ruma_common::api::IncomingRequestExt as _;
78
79 use super::Request;
80
81 #[test]
82 fn deserialize_request() {
83 let request = http::Request::builder()
84 .method("POST")
85 .uri("/_matrix/federation/unstable/io.element.msc4195/rtc/livekit/get_token")
86 .body(
87 br#"{
88 "user_id": "@alice:example.org",
89 "url": "wss://livekit.example.org",
90 "room_id": "!tDLCaLXijNtYcJZEey:example.org",
91 "slot_id": "the_id",
92 "member_id": "xyzABCDEF10123"
93 }"# as &[u8],
94 )
95 .unwrap();
96
97 let request = Request::try_from_http_request(request, &[] as &[&str]).unwrap();
98
99 assert_eq!(request.user_id, "@alice:example.org");
100 assert_eq!(request.url, "wss://livekit.example.org");
101 assert_eq!(request.room_id, "!tDLCaLXijNtYcJZEey:example.org");
102 assert_eq!(request.slot_id, "the_id");
103 assert_eq!(request.member_id, "xyzABCDEF10123");
104 }
105 }
106}