mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-16 23:31:07 +00:00
91 lines
1.9 KiB
Rust
91 lines
1.9 KiB
Rust
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<InnerRefDelegateStruct>,
|
|
}
|
|
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 }));
|
|
}
|