use serde::Serialize;
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateUserValues {
display_name: Option<Option<String>>,
email: Option<String>,
password: Option<String>,
disabled: Option<bool>,
}
impl UpdateUserValues {
pub fn new() -> Self {
Self::default()
}
pub fn display_name(mut self, display_name: Option<impl Into<String>>) -> Self {
self.display_name = Some(display_name.map(Into::into));
self
}
pub fn email(mut self, email: impl Into<String>) -> Self {
self.email = Some(email.into());
self
}
pub fn password(mut self, password: impl Into<String>) -> Self {
self.password = Some(password.into());
self
}
pub fn disabled(mut self, disabled: bool) -> Self {
self.disabled = Some(disabled);
self
}
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct UpdateUserBody<'a> {
local_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
password: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
delete_attribute: Vec<&'static str>,
#[serde(skip_serializing_if = "Option::is_none")]
disable_user: Option<bool>,
}
impl<'a> UpdateUserBody<'a> {
pub(crate) fn from_values(user_id: &'a str, values: UpdateUserValues) -> Self {
let mut delete_attribute = Vec::new();
if let Some(None) = values.display_name {
delete_attribute.push("DISPLAY_NAME");
}
Self {
local_id: user_id,
display_name: values.display_name.flatten(),
email: values.email,
password: values.password,
delete_attribute,
disable_user: values.disabled,
}
}
}