synapse_admin_api/users/list_users/
v2.rs1use ruma::{
4 api::{metadata, request, response, Metadata},
5 OwnedUserId, UInt,
6};
7use serde::{Deserialize, Serialize};
8
9const METADATA: Metadata = metadata! {
10 method: GET,
11 rate_limited: false,
12 authentication: AccessToken,
13 history: {
14 unstable => "/_synapse/admin/v2/users",
15 }
16};
17
18#[request]
19#[derive(Default)]
20pub struct Request {
21 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
25 #[ruma_api(query)]
26 pub from: 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")]
37 #[ruma_api(query)]
38 pub user_id: Option<OwnedUserId>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
43 #[ruma_api(query)]
44 pub name: Option<String>,
45
46 #[serde(default = "ruma::serde::default_true", skip_serializing_if = "ruma::serde::is_true")]
50 #[ruma_api(query)]
51 pub guests: bool,
52
53 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
57 #[ruma_api(query)]
58 pub deactivated: bool,
59
60 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
64 #[ruma_api(query)]
65 pub locked: bool,
66}
67
68#[response]
69pub struct Response {
70 pub users: Vec<UserMinorDetails>,
72
73 pub next_token: Option<String>,
79
80 pub total: UInt,
82}
83
84impl Request {
85 pub fn new() -> Self {
87 Default::default()
88 }
89}
90
91impl Response {
92 pub fn new(users: Vec<UserMinorDetails>, total: UInt) -> Self {
94 Self { users, next_token: None, total }
95 }
96}
97
98#[derive(Serialize, Deserialize, Clone, Debug)]
100#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
101pub struct UserMinorDetails {
102 pub name: String,
104
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub user_type: Option<String>,
108
109 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
111 pub is_guest: bool,
112
113 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
115 pub admin: bool,
116
117 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
119 pub deactivated: bool,
120
121 pub displayname: String,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub avatar_url: Option<String>,
127
128 #[serde(default, deserialize_with = "crate::serde::bool_or_uint")]
130 pub locked: bool,
131}
132
133impl UserMinorDetails {
134 pub fn new(name: String) -> Self {
137 Self {
138 name,
139 is_guest: false,
140 admin: false,
141 user_type: None,
142 deactivated: false,
143 displayname: String::new(),
144 avatar_url: None,
145 locked: false,
146 }
147 }
148}