synapse_admin_api/rooms/list_rooms/
v1.rs1use ruma::{
3 OwnedRoomAliasId, OwnedRoomId, OwnedUserId, UInt,
4 api::{auth_scheme::AccessToken, metadata, request, response},
5 events::room::{guest_access::GuestAccess, history_visibility::HistoryVisibility},
6 room::{JoinRuleKind, RoomType},
7 serde::StringEnum,
8 uint,
9};
10use serde::{Deserialize, Serialize};
11
12metadata! {
13 method: GET,
14 rate_limited: false,
15 authentication: AccessToken,
16 path: "/_synapse/admin/v1/rooms",
17}
18
19#[request]
20#[derive(Default)]
21pub struct Request {
22 #[serde(skip_serializing_if = "Option::is_none")]
24 #[ruma_api(query)]
25 pub from: Option<UInt>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
29 #[ruma_api(query)]
30 pub limit: Option<UInt>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 #[ruma_api(query)]
35 pub order_by: Option<RoomSortOrder>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 #[ruma_api(query)]
40 pub dir: Option<SortDirection>,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
45 #[ruma_api(query)]
46 pub search_term: Option<String>,
47}
48
49#[derive(Default)]
50#[response]
51pub struct Response {
52 pub rooms: Vec<RoomDetails>,
54
55 pub offset: UInt,
57
58 pub total_rooms: UInt,
60
61 pub next_batch: Option<UInt>,
63
64 pub prev_batch: Option<UInt>,
66}
67
68impl Request {
69 pub fn new() -> Self {
71 Default::default()
72 }
73}
74
75impl Response {
76 pub fn new() -> Self {
78 Default::default()
79 }
80}
81
82#[derive(Clone, StringEnum)]
84#[ruma_enum(rename_all = "snake_case")]
85#[non_exhaustive]
86pub enum RoomSortOrder {
87 Name,
89
90 CanonicalAlias,
92
93 JoinedMembers,
95
96 JoinedLocalMembers,
98
99 Version,
101
102 Creator,
104
105 Encryption,
107
108 Federatable,
110
111 Public,
113
114 JoinRules,
116
117 GuestAccess,
119
120 HistoryVisibility,
122
123 StateEvents,
125
126 #[doc(hidden)]
127 _Custom(crate::PrivOwnedStr),
128}
129
130#[derive(Clone, StringEnum)]
132#[non_exhaustive]
133pub enum SortDirection {
134 #[ruma_enum(rename = "b")]
136 Backward,
137
138 #[ruma_enum(rename = "f")]
140 Forward,
141
142 #[doc(hidden)]
143 _Custom(crate::PrivOwnedStr),
144}
145
146#[derive(Serialize, Deserialize, Clone, Debug)]
148#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
149pub struct RoomDetails {
150 pub room_id: OwnedRoomId,
152
153 pub name: Option<String>,
155
156 pub canonical_alias: Option<OwnedRoomAliasId>,
158
159 pub joined_members: UInt,
161
162 pub joined_local_members: UInt,
164
165 pub version: Option<String>,
167
168 #[serde(deserialize_with = "ruma::serde::empty_string_as_none")]
170 pub creator: Option<OwnedUserId>,
171
172 pub encryption: Option<String>,
174
175 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
177 pub federatable: bool,
178
179 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
181 pub public: bool,
182
183 pub join_rules: Option<JoinRuleKind>,
185
186 pub guest_access: Option<GuestAccess>,
188
189 pub history_visibility: Option<HistoryVisibility>,
191
192 pub state_events: UInt,
194
195 pub room_type: Option<RoomType>,
197}
198
199impl RoomDetails {
200 pub fn new(room_id: OwnedRoomId) -> Self {
203 Self {
204 room_id,
205 name: None,
206 canonical_alias: None,
207 joined_members: uint!(0),
208 joined_local_members: uint!(0),
209 version: None,
210 creator: None,
211 encryption: None,
212 federatable: false,
213 public: false,
214 join_rules: None,
215 guest_access: None,
216 history_visibility: None,
217 state_events: uint!(0),
218 room_type: None,
219 }
220 }
221}