use optional_struct::*;
#[optional_struct]
#[derive(Eq, PartialEq, Debug)]
struct Foo {
paf: u16,
bar: Option<u8>,
#[optional_wrap]
baz: Option<char>,
#[optional_rename(OptionalMiaou)]
#[optional_wrap]
miaou: Miaou,
}
#[optional_struct]
#[derive(Eq, PartialEq, Debug)]
struct Miaou {
a: i8,
b: i16,
}
#[test]
fn test_builder() {
let default = Foo {
paf: 12,
bar: None,
baz: Some('a'),
miaou: Miaou { a: 1, b: -1 },
};
let first = OptionalFoo {
paf: Some(42),
bar: Some(7),
baz: Some(None),
miaou: None,
};
let second = OptionalFoo {
paf: Some(24),
bar: None,
baz: Some(Some('c')),
miaou: Some(OptionalMiaou {
a: Some(2),
b: None,
}),
};
let collapsed = first.apply(second).build(default);
assert_eq!(
collapsed,
Foo {
paf: 24,
bar: Some(7),
baz: Some('c'),
miaou: Miaou { a: 2, b: -1 },
}
);
}