#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, enum_fields::EnumFields)]
pub enum Entity {
Company {
name: String,
ceo: String,
},
Person {
name: String,
}
}
fn main() {
let mut company = Entity::Company {
name: "Apple".into(),
ceo: "Tim Cook".into()
};
let person = Entity::Person {
name: "Tim Berners-Lee".into()
};
println!("Company with CEO: {:?} named: {}",
company.ceo().unwrap(),
company.name()
);
println!("Person named: {}", person.name());
assert_eq!(company.name(), "Apple");
assert_eq!(person.name(), "Tim Berners-Lee");
assert_eq!(company.ceo(), Some(&"Tim Cook".into()));
assert_eq!(person.ceo(), None);
if let Some(ceo) = company.ceo_mut() {
ceo.push_str(" ?!");
}
assert_eq!(company.ceo(), Some(&"Tim Cook ?!".into()));
*company.name_mut() = "Microsoft".into();
assert_eq!(company.name(), "Microsoft");
}