use super::*;
#[derive(Serialize)]
struct Request {
email: Option<String>,
password: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "::serde_with::rust::double_option"
)]
first_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "::serde_with::rust::double_option"
)]
last_name: Option<Option<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "::serde_with::rust::double_option"
)]
birthday: Option<Option<time::Date>>,
}
impl Client {
pub async fn update_user(
&self,
user: i32,
email: Option<String>,
password: Option<String>,
first_name: Option<Option<String>>,
last_name: Option<Option<String>>,
birthday: Option<Option<time::Date>>,
) -> Result<Option<()>, Box<dyn std::error::Error>> {
let res = req()
.put(self.endpoint("/v1/users/{}", vec![user.to_string()]))
.json(&Request {
email,
password,
first_name,
last_name,
birthday,
})
.send()
.await?;
match res.status() {
StatusCode::NOT_FOUND => Ok(None),
StatusCode::BAD_REQUEST => Err("Bad Request".into()),
StatusCode::OK => Ok(Some(())),
_ => Err("Unknown Response Status Code".into()),
}
}
}