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)]
100pub struct UserMinorDetails {
101 pub name: String,
103
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub user_type: Option<String>,
107
108 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
110 pub is_guest: bool,
111
112 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
114 pub admin: bool,
115
116 #[serde(deserialize_with = "crate::serde::bool_or_uint")]
118 pub deactivated: bool,
119
120 pub displayname: String,
122
123 #[serde(skip_serializing_if = "Option::is_none")]
125 pub avatar_url: Option<String>,
126
127 #[serde(default, deserialize_with = "crate::serde::bool_or_uint")]
129 pub locked: bool,
130}