synapse_admin_api/users/list_users/
v2.rs1use ruma::{
4 OwnedUserId, UInt,
5 api::{auth_scheme::AccessToken, metadata, request, response},
6};
7use serde::{Deserialize, Serialize};
8
9metadata! {
10 method: GET,
11 rate_limited: false,
12 authentication: AccessToken,
13 path: "/_synapse/admin/v2/users",
14}
15
16#[request]
17#[derive(Default)]
18pub struct Request {
19 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
23 #[ruma_api(query)]
24 pub from: UInt,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
28 #[ruma_api(query)]
29 pub limit: Option<UInt>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
35 #[ruma_api(query)]
36 pub user_id: Option<OwnedUserId>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
41 #[ruma_api(query)]
42 pub name: Option<String>,
43
44 #[serde(default = "ruma::serde::default_true", skip_serializing_if = "ruma::serde::is_true")]
48 #[ruma_api(query)]
49 pub guests: bool,
50
51 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
55 #[ruma_api(query)]
56 pub deactivated: bool,
57
58 #[serde(default, skip_serializing_if = "ruma::serde::is_default")]
62 #[ruma_api(query)]
63 pub locked: bool,
64}
65
66#[response]
67pub struct Response {
68 pub users: Vec<UserMinorDetails>,
70
71 pub next_token: Option<String>,
77
78 pub total: UInt,
80}
81
82impl Request {
83 pub fn new() -> Self {
85 Default::default()
86 }
87}
88
89impl Response {
90 pub fn new(users: Vec<UserMinorDetails>, total: UInt) -> Self {
92 Self { users, next_token: None, total }
93 }
94}
95
96#[derive(Serialize, Deserialize, Clone, Debug)]
98#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
99pub struct UserMinorDetails {
100 pub name: String,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub user_type: Option<String>,
106
107 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
109 pub is_guest: bool,
110
111 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
113 pub admin: bool,
114
115 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
117 pub deactivated: bool,
118
119 pub displayname: String,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub avatar_url: Option<String>,
125
126 #[serde(default, deserialize_with = "crate::serde::bool_or_uint")]
128 pub locked: bool,
129}
130
131impl UserMinorDetails {
132 pub fn new(name: String) -> Self {
135 Self {
136 name,
137 is_guest: false,
138 admin: false,
139 user_type: None,
140 deactivated: false,
141 displayname: String::new(),
142 avatar_url: None,
143 locked: false,
144 }
145 }
146}