use super::*;
#[derive(Serialize)]
struct Request {
user: RequestUser,
verify: Option<RequestVerify>,
}
#[derive(Serialize)]
struct RequestUser {
email: String,
password: String,
first_name: Option<String>,
last_name: Option<String>,
birthday: Option<time::Date>,
}
#[derive(Serialize)]
struct RequestVerify {
sender_name: String,
callback: String,
}
#[derive(Deserialize)]
struct Response {
id: i32,
}
impl Client {
pub async fn create_user(
&self,
email: String,
password: String,
first_name: Option<String>,
last_name: Option<String>,
birthday: Option<time::Date>,
sender_name: Option<String>,
callback: Option<String>,
) -> Result<Option<i32>, Box<dyn std::error::Error>> {
let mut data = Request {
user: RequestUser {
email,
password,
first_name,
last_name,
birthday,
},
verify: None,
};
if sender_name.is_some() && callback.is_some() {
data.verify = Some(RequestVerify {
sender_name: sender_name.unwrap(),
callback: callback.unwrap(),
});
}
let res = req()
.post(self.endpoint("/v1/users", vec![]))
.json(&data)
.send()
.await?;
match res.status() {
StatusCode::CONFLICT => Ok(None),
StatusCode::BAD_REQUEST => Err("Bad Request".into()),
StatusCode::OK => Ok(Some(res.json::<Response>().await?.id)),
_ => Err("Unknown Response Status Code".into()),
}
}
}