use serde::Serialize;
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
pub struct User {
pub id: Option<String>,
pub name: Option<String>,
pub email: Option<String>,
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
impl User {
pub fn builder() -> UserBuilder {
UserBuilder {
user: User { id: None, name: None, email: None },
}
}
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
pub struct UserBuilder {
user: User,
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
impl UserBuilder {
pub fn set_id<'a>(&mut self, id: impl Into<Option<&'a str>>) -> &mut Self {
self.user.id = id.into().map(|item| item.into());
self
}
pub fn set_name<'a>(
&mut self,
name: impl Into<Option<&'a str>>,
) -> &mut Self {
self.user.name = name.into().map(|item| item.into());
self
}
pub fn set_email<'a>(
&mut self,
email: impl Into<Option<&'a str>>,
) -> &mut Self {
self.user.email = email.into().map(|item| item.into());
self
}
pub fn build(&self) -> User {
self.user.clone()
}
}
#[cfg(test)]
mod test {
#[cfg(feature = "optional-builders")]
#[test]
pub fn test_error_payload_events_user_builder() {
use crate::error::payload::events::User;
let test_user = User {
id: "1".to_string().into(),
name: "John Doe".to_string().into(),
email: "jdoe@email.com".to_string().into(),
};
let user = User::builder()
.set_id(test_user.id.clone().unwrap().as_str())
.set_name(test_user.name.clone().unwrap().as_str())
.set_email(test_user.email.clone().unwrap().as_str())
.build();
assert_eq!(test_user, user);
}
}