use derive_setters::*; #[derive(Default, Setters, Debug, PartialEq, Eq)] #[setters(borrow_self)] struct BasicRefStruct { #[setters(rename = "test")] a: u32, b: u32, #[setters(borrow_self = "false")] c: u32, #[setters(borrow_self = false)] d: u32, } #[test] fn basic_ref_struct() { let mut a = BasicRefStruct::default().c(34).d(4); a.test(1); a.b(3); assert_eq!(a.a, 1); assert_eq!(a.b, 3); assert_eq!(a.c, 34); assert_eq!(a.d, 4); } #[derive(Default, Setters, Debug, PartialEq, Eq)] struct FieldRefStruct { a: u32, #[setters(borrow_self)] b: u32, } #[test] fn field_ref_struct() { let mut a = FieldRefStruct::default().a(10); a.b(20); assert_eq!(a.a, 10); assert_eq!(a.b, 20); } #[derive(Default, Setters, Debug, PartialEq, Eq)] #[setters(borrow_self)] #[setters(generate_delegates(ty = "BasicRefDelegateField", field = "x"))] #[setters(generate_delegates(ty = "BasicRefDelegateMethod", method = "get_x"))] struct InnerRefDelegateStruct { #[setters(rename = "test")] a: u32, b: u32, c: u32, } #[derive(Default, Debug, PartialEq, Eq)] struct BasicRefDelegateField { x: InnerRefDelegateStruct, } #[derive(Default, Debug, PartialEq, Eq)] struct BasicRefDelegateMethod { x: Option, } impl BasicRefDelegateMethod { fn get_x(&mut self) -> &mut InnerRefDelegateStruct { if self.x.is_none() { self.x = Some(InnerRefDelegateStruct::default()); } self.x.as_mut().unwrap() } } #[test] fn basic_ref_delegate_field() { let mut a = BasicRefDelegateField::default(); a.test(1); a.b(3); a.c(34); assert_eq!(a.x, InnerRefDelegateStruct{ a: 1, b: 3, c: 34 }); } #[test] fn basic_ref_delegate_method() { let mut a = BasicRefDelegateMethod::default(); a.test(1); a.b(3); a.c(34); assert_eq!(a.x, Some(InnerRefDelegateStruct{ a: 1, b: 3, c: 34 })); }