pub mod msc4195 {
use ruma_common::{
OwnedRoomId, OwnedUserId,
api::{request, response},
metadata,
};
use crate::authentication::ServerSignatures;
metadata! {
method: POST,
rate_limited: false,
authentication: ServerSignatures,
path: "/_matrix/federation/unstable/io.element.msc4195/rtc/livekit/get_token",
}
#[request]
pub struct Request {
pub user_id: OwnedUserId,
pub url: String,
pub room_id: OwnedRoomId,
pub slot_id: String,
pub member_id: String,
}
impl Request {
pub fn new(
user_id: OwnedUserId,
url: String,
room_id: OwnedRoomId,
slot_id: String,
member_id: String,
) -> Self {
Self { user_id, url, room_id, slot_id, member_id }
}
}
#[response]
pub struct Response {
pub jwt: String,
}
impl Response {
pub fn new(jwt: String) -> Self {
Self { jwt }
}
}
#[cfg(all(test, feature = "server"))]
mod server_tests {
use ruma_common::api::IncomingRequestExt as _;
use super::Request;
#[test]
fn deserialize_request() {
let request = http::Request::builder()
.method("POST")
.uri("/_matrix/federation/unstable/io.element.msc4195/rtc/livekit/get_token")
.body(
br#"{
"user_id": "@alice:example.org",
"url": "wss://livekit.example.org",
"room_id": "!tDLCaLXijNtYcJZEey:example.org",
"slot_id": "the_id",
"member_id": "xyzABCDEF10123"
}"# as &[u8],
)
.unwrap();
let request = Request::try_from_http_request(request, &[] as &[&str]).unwrap();
assert_eq!(request.user_id, "@alice:example.org");
assert_eq!(request.url, "wss://livekit.example.org");
assert_eq!(request.room_id, "!tDLCaLXijNtYcJZEey:example.org");
assert_eq!(request.slot_id, "the_id");
assert_eq!(request.member_id, "xyzABCDEF10123");
}
}
}