synapse_admin_api/rooms/list_rooms/
v1.rs1use ruma::{
3 api::{metadata, request, response, Metadata},
4 events::room::{guest_access::GuestAccess, history_visibility::HistoryVisibility},
5 room::{JoinRuleKind, RoomType},
6 serde::{OrdAsRefStr, PartialEqAsRefStr, PartialOrdAsRefStr, StringEnum},
7 uint, OwnedRoomAliasId, OwnedRoomId, OwnedUserId, UInt,
8};
9use serde::{Deserialize, Serialize};
10
11const METADATA: Metadata = metadata! {
12 method: GET,
13 rate_limited: false,
14 authentication: AccessToken,
15 history: {
16 unstable => "/_synapse/admin/v1/rooms",
17 }
18};
19
20#[request]
21#[derive(Default)]
22pub struct Request {
23 #[serde(skip_serializing_if = "Option::is_none")]
25 #[ruma_api(query)]
26 pub from: Option<UInt>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 #[ruma_api(query)]
31 pub limit: Option<UInt>,
32
33 #[serde(skip_serializing_if = "Option::is_none")]
35 #[ruma_api(query)]
36 pub order_by: Option<RoomSortOrder>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
40 #[ruma_api(query)]
41 pub dir: Option<SortDirection>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
46 #[ruma_api(query)]
47 pub search_term: Option<String>,
48}
49
50#[derive(Default)]
51#[response]
52pub struct Response {
53 pub rooms: Vec<RoomDetails>,
55
56 pub offset: UInt,
58
59 pub total_rooms: UInt,
61
62 pub next_batch: Option<UInt>,
64
65 pub prev_batch: Option<UInt>,
67}
68
69impl Request {
70 pub fn new() -> Self {
72 Default::default()
73 }
74}
75
76impl Response {
77 pub fn new() -> Self {
79 Default::default()
80 }
81}
82
83#[derive(Clone, PartialEqAsRefStr, Eq, PartialOrdAsRefStr, OrdAsRefStr, StringEnum)]
85#[ruma_enum(rename_all = "snake_case")]
86#[non_exhaustive]
87pub enum RoomSortOrder {
88 Name,
90
91 CanonicalAlias,
93
94 JoinedMembers,
96
97 JoinedLocalMembers,
99
100 Version,
102
103 Creator,
105
106 Encryption,
108
109 Federatable,
111
112 Public,
114
115 JoinRules,
117
118 GuestAccess,
120
121 HistoryVisibility,
123
124 StateEvents,
126
127 #[doc(hidden)]
128 _Custom(crate::PrivOwnedStr),
129}
130
131#[derive(Clone, PartialEqAsRefStr, Eq, PartialOrdAsRefStr, OrdAsRefStr, StringEnum)]
133#[non_exhaustive]
134pub enum SortDirection {
135 #[ruma_enum(rename = "b")]
137 Backward,
138
139 #[ruma_enum(rename = "f")]
141 Forward,
142
143 #[doc(hidden)]
144 _Custom(crate::PrivOwnedStr),
145}
146
147#[derive(Serialize, Deserialize, Clone, Debug)]
149#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
150pub struct RoomDetails {
151 pub room_id: OwnedRoomId,
153
154 pub name: Option<String>,
156
157 pub canonical_alias: Option<OwnedRoomAliasId>,
159
160 pub joined_members: UInt,
162
163 pub joined_local_members: UInt,
165
166 pub version: Option<String>,
168
169 #[serde(deserialize_with = "ruma::serde::empty_string_as_none")]
171 pub creator: Option<OwnedUserId>,
172
173 pub encryption: Option<String>,
175
176 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
178 pub federatable: bool,
179
180 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
182 pub public: bool,
183
184 pub join_rules: Option<JoinRuleKind>,
186
187 pub guest_access: Option<GuestAccess>,
189
190 pub history_visibility: Option<HistoryVisibility>,
192
193 pub state_events: UInt,
195
196 pub room_type: Option<RoomType>,
198}
199
200impl RoomDetails {
201 pub fn new(room_id: OwnedRoomId) -> Self {
204 Self {
205 room_id,
206 name: None,
207 canonical_alias: None,
208 joined_members: uint!(0),
209 joined_local_members: uint!(0),
210 version: None,
211 creator: None,
212 encryption: None,
213 federatable: false,
214 public: false,
215 join_rules: None,
216 guest_access: None,
217 history_visibility: None,
218 state_events: uint!(0),
219 room_type: None,
220 }
221 }
222}