use ruma::{
OwnedUserId, UInt,
api::{auth_scheme::AccessToken, metadata, request, response},
};
use serde::{Deserialize, Serialize};
metadata! {
method: GET,
rate_limited: false,
authentication: AccessToken,
path: "/_synapse/admin/v2/users",
}
#[request]
#[derive(Default)]
pub struct Request {
#[serde(default, skip_serializing_if = "ruma::serde::is_default")]
#[ruma_api(query)]
pub from: UInt,
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub limit: Option<UInt>,
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub user_id: Option<OwnedUserId>,
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub name: Option<String>,
#[serde(default = "ruma::serde::default_true", skip_serializing_if = "ruma::serde::is_true")]
#[ruma_api(query)]
pub guests: bool,
#[serde(default, skip_serializing_if = "ruma::serde::is_default")]
#[ruma_api(query)]
pub deactivated: bool,
#[serde(default, skip_serializing_if = "ruma::serde::is_default")]
#[ruma_api(query)]
pub locked: bool,
}
#[response]
pub struct Response {
pub users: Vec<UserMinorDetails>,
pub next_token: Option<String>,
pub total: UInt,
}
impl Request {
pub fn new() -> Self {
Default::default()
}
}
impl Response {
pub fn new(users: Vec<UserMinorDetails>, total: UInt) -> Self {
Self { users, next_token: None, total }
}
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
pub struct UserMinorDetails {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_type: Option<String>,
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub is_guest: bool,
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub admin: bool,
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub deactivated: bool,
pub displayname: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
#[serde(default, deserialize_with = "crate::serde::bool_or_uint")]
pub locked: bool,
}
impl UserMinorDetails {
pub fn new(name: String) -> Self {
Self {
name,
is_guest: false,
admin: false,
user_type: None,
deactivated: false,
displayname: String::new(),
avatar_url: None,
locked: false,
}
}
}