use ruma::{
OwnedUserId,
api::{auth_scheme::AccessToken, metadata, request, response},
thirdparty::Medium,
};
use serde::{Deserialize, Serialize};
pub use crate::users::{ExternalId, UserDetails};
metadata! {
method: PUT,
rate_limited: false,
authentication: AccessToken,
path: "/_synapse/admin/v2/users/{user_id}",
}
#[request]
pub struct Request {
#[ruma_api(path)]
pub user_id: OwnedUserId,
pub password: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub threepids: Option<Vec<ThirdPartyIdentifier>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub external_ids: Option<Vec<ExternalId>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub admin: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deactivated: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locked: Option<bool>,
}
#[response]
pub struct Response {
#[ruma_api(body)]
pub details: UserDetails,
}
impl Request {
pub fn new(user_id: OwnedUserId, password: Option<String>) -> Self {
Self {
user_id,
password,
displayname: None,
threepids: None,
external_ids: None,
avatar_url: None,
admin: None,
deactivated: None,
locked: None,
}
}
}
impl Response {
pub fn new(details: UserDetails) -> Self {
Self { details }
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
pub struct ThirdPartyIdentifier {
pub address: String,
pub medium: Medium,
}