#[test]
fn named_struct_convert() {
#[attrimpl::attrimpl]
struct NamedStruct {
#[attrimpl(from, into)]
name: String,
}
let value = Box::<NamedStruct>::from("test".to_string());
assert_eq!(value.name, "test");
let value = Box::<NamedStruct>::from("test".to_string());
assert_eq!(value.name, "test");
let value: String = (*value).into();
assert_eq!(value, "test");
}
#[test]
fn named_struct_complex() {
#[attrimpl::attrimpl]
struct NamedStruct {
#[attrimpl(into)]
#[attrimpl(as_ref, as_mut)]
#[attrimpl(get_ref)]
name: String,
#[attrimpl(deref_mut)]
#[attrimpl(access)]
hobby: String,
}
let mut value = NamedStruct {
name: "Jane Doe".to_string(),
hobby: "rock climbing".to_string(),
};
*value = "ice climbing".to_string();
assert_eq!(*value, "ice climbing");
*value.hobby_mut() = "rock climbing".to_string();
assert_eq!(value.hobby(), "rock climbing");
assert_eq!(value.name(), "Jane Doe");
assert_eq!(value.as_ref(), "Jane Doe");
*value.as_mut() = "John Doe".to_string();
assert_eq!(value.as_ref(), "John Doe");
let value: String = value.into();
assert_eq!(value, "John Doe");
}
#[test]
fn named_struct_access() {
#[attrimpl::attrimpl]
struct NamedStruct {
#[attrimpl(
get_ref,
get_mut,
get_ref(name = "a"),
get_clone(name = "b"),
access(name = "c"),
access(name = "d", get_ref),
access(name = "e", get_clone)
)]
name: String,
#[attrimpl(
get_ref,
get_mut,
get_ref(name = "f"),
get_clone(name = "g"),
get_copy(name = "h"),
access(name = "i"),
access(name = "j", get_ref),
access(name = "k", get_clone),
access(name = "l", get_copy)
)]
value: usize,
}
let mut value = NamedStruct {
name: "test".to_string(),
value: 42,
};
let _r: &String = value.name();
let _r: &mut String = value.name_mut();
let _r: &String = value.a();
let _r: String = value.b();
let _r: &String = value.c();
let _r: &mut String = value.c_mut();
let _r: &String = value.d();
let _r: &mut String = value.d_mut();
let _r: String = value.e();
let _r: &mut String = value.e_mut();
let _r: &usize = value.value();
let _r: &mut usize = value.value_mut();
let _r: &usize = value.f();
let _r: usize = value.g();
let _r: usize = value.h();
let _r: &usize = value.i();
let _r: &mut usize = value.i_mut();
let _r: &usize = value.j();
let _r: &mut usize = value.j_mut();
let _r: usize = value.k();
let _r: &mut usize = value.k_mut();
let _r: usize = value.l();
let _r: &mut usize = value.l_mut();
}