use quick_impl::{quick_impl, quick_impl_all};
#[quick_impl_all(pub get)]
struct Person {
#[quick_impl(impl AsRef, impl Borrow)]
name: String,
#[quick_impl(pub set, pub get_mut, impl AsMut)]
age: u32,
}
#[quick_impl]
struct PersonRef<'a> {
#[quick_impl(impl Deref, impl DerefMut)]
person: &'a mut Person,
}
fn main() {
let mut person = Person {
name: "Alice".to_string(),
age: 30,
};
assert_eq!(person.get_name(), "Alice");
assert_eq!(*person.get_age(), 30);
*person.get_age_mut() += 1;
assert_eq!(*person.get_age(), 31);
person.set_age(40);
assert_eq!(*person.get_age(), 40);
let name: &String = person.as_ref();
assert_eq!(name, "Alice");
let name: &String = std::borrow::Borrow::borrow(&person);
assert_eq!(name, "Alice");
let age: &mut u32 = person.as_mut();
*age = 50;
assert_eq!(*person.get_age(), 50);
let mut person_ref = PersonRef {
person: &mut person,
};
assert_eq!(person_ref.get_name(), "Alice");
person_ref.set_age(60);
assert_eq!(*person_ref.get_age(), 60);
}