@@ -5,7 +5,7 @@ use struct_patch::Filler;
55use struct_patch:: Status ;
66
77// NOTE: Default, Extend, IntoIterator, is_empty are required for extendable type
8- #[ derive( Debug , Default ) ]
8+ #[ derive( Clone , Debug , Default ) ]
99struct WrapVec {
1010 inner : Vec < usize > ,
1111}
@@ -30,8 +30,8 @@ impl WrapVec {
3030 }
3131}
3232
33- #[ derive( Default , Filler ) ]
34- #[ filler( attribute( derive( Debug , Default ) ) ) ]
33+ #[ derive( Clone , Default , Filler ) ]
34+ #[ filler( attribute( derive( Clone , Debug , Default ) ) ) ]
3535struct Item {
3636 field_complete : bool ,
3737 // Will check the field is equal to the value to define the field is empty or not
@@ -127,4 +127,36 @@ fn main() {
127127 filler. field_int = 5 ;
128128 item. apply ( filler) ;
129129 assert_eq ! ( item. field_int, 7 ) ;
130+
131+ #[ cfg( feature = "op" ) ]
132+ {
133+ let item = Item :: default ( ) ;
134+
135+ let mut filler1: ItemFiller = Item :: new_empty_filler ( ) ;
136+ filler1. field_int = 7 ;
137+ filler1. list = vec ! [ 1 , 2 ] ;
138+
139+ let mut filler2: ItemFiller = Item :: new_empty_filler ( ) ;
140+ filler2. field_int = 8 ;
141+ filler2. list = vec ! [ 3 , 4 ] ;
142+ filler2. maybe_field_string = Some ( "Something" . into ( ) ) ;
143+
144+ let final_item_from_added_fillers = item. clone ( ) << ( filler1. clone ( ) + filler2. clone ( ) ) ;
145+
146+ assert_eq ! ( final_item_from_added_fillers. field_int, 15 ) ;
147+ assert_eq ! ( final_item_from_added_fillers. list, vec![ 1 , 2 , 3 , 4 ] ) ;
148+ assert_eq ! (
149+ final_item_from_added_fillers. maybe_field_string,
150+ Some ( "Something" . into( ) )
151+ ) ;
152+
153+ let final_item_after_fillers_applied = item << filler1 << filler2;
154+
155+ assert_eq ! ( final_item_after_fillers_applied. field_int, 7 ) ;
156+ assert_eq ! ( final_item_after_fillers_applied. list, vec![ 1 , 2 ] ) ;
157+ assert_eq ! (
158+ final_item_after_fillers_applied. maybe_field_string,
159+ Some ( "Something" . into( ) )
160+ ) ;
161+ }
130162}
0 commit comments