synapse_admin_api/experimental_features/enable_features/
v1.rs1use ruma::{
4 api::{request, response, Metadata},
5 metadata, OwnedUserId,
6};
7use serde::{Deserialize, Serialize};
8
9const METADATA: Metadata = metadata! {
10 method: PUT,
11 rate_limited: false,
12 authentication: AccessToken,
13 history: {
14 unstable => "/_synapse/admin/v1/experimental_features/{user_id}",
15 }
16};
17
18#[request]
19#[derive(Serialize, Deserialize, PartialEq)]
20pub struct Request {
21 #[ruma_api(path)]
23 pub user_id: OwnedUserId,
24 pub features: ExperimentalFeatures,
26}
27
28#[derive(Serialize, Deserialize, Clone, PartialEq, Debug, Default)]
29#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
30pub struct ExperimentalFeatures {
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub msc3026: Option<bool>,
34 #[serde(skip_serializing_if = "Option::is_none")]
36 pub msc3881: Option<bool>,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub msc3967: Option<bool>,
40}
41
42impl ExperimentalFeatures {
43 pub fn new() -> Self {
45 Self::default()
46 }
47}
48
49#[response]
50#[derive(Default)]
51pub struct Response {}
52
53impl Request {
54 pub fn new(user_id: OwnedUserId, features: ExperimentalFeatures) -> Self {
57 Self { user_id, features }
58 }
59}
60
61impl Response {
62 pub fn new() -> Self {
64 Self {}
65 }
66}
67
68#[test]
69fn test_enable_features() {
70 use std::convert::TryFrom;
71
72 use ruma::UserId;
73
74 let features =
75 ExperimentalFeatures { msc3026: Option::from(true), msc3881: None, msc3967: None };
76
77 let user_id: &UserId =
78 <&UserId>::try_from("@carl:example.com").expect("Failed to create UserId.");
79
80 let request = Request::new(user_id.to_owned(), features);
82
83 let serialized = serde_json::to_string(&request).expect("Failed to serialize");
85 assert_eq!(serialized, "{\"user_id\":\"@carl:example.com\",\"features\":{\"msc3026\":true}}");
86
87 let deserialized: Request = serde_json::from_str(&serialized).expect("Failed to deserialize");
89 assert_eq!(deserialized, request);
90}