use http::Method;
use serde::Serialize;
use super::UserInfo;
use crate::{api, auth::Authenticated, query::DefaultModel, Endpoint};
#[derive(Clone, Debug, Eq, Ord, Hash, PartialEq, PartialOrd, Serialize, Default)]
pub struct EditMe {
pub name: Option<String>,
pub email: Option<String>,
}
impl EditMe {
pub fn name_and_mail(name: impl Into<String>, email: impl Into<String>) -> Self {
Self {
name: Some(name.into()),
email: Some(email.into()),
}
}
pub fn email(email: impl Into<String>) -> Self {
Self {
email: Some(email.into()),
name: None,
}
}
pub fn name(name: impl Into<String>) -> Self {
Self {
name: Some(name.into()),
email: None,
}
}
}
impl Endpoint for EditMe {
type AccessControl = Authenticated;
fn method(&self) -> Method {
Method::PATCH
}
fn endpoint(&self) -> std::borrow::Cow<'static, str> {
"users/me".into()
}
fn body(&self) -> Result<Option<(&'static str, Vec<u8>)>, crate::BodyError> {
Ok(Some((
api::mime_types::JSON,
serde_json::to_string(self)?.into_bytes(),
)))
}
}
impl DefaultModel for EditMe {
type Model = UserInfo;
}