user-service 0.4.1

A user management microservice.
Documentation
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()),
        }
    }
}