@@ -69,11 +69,13 @@ fn derive_zeroize(mut s: synstructure::Structure<'_>) -> TokenStream {
6969
7070/// Custom derive for `ZeroizeOnDrop`
7171fn derive_zeroize_on_drop ( mut s : synstructure:: Structure < ' _ > ) -> TokenStream {
72- let zeroizers = generate_fields ( & mut s) ;
72+ let zeroizers = generate_fields ( & mut s, quote ! { zeroize_or_on_drop } ) ;
7373
7474 let drop_impl = s. gen_impl ( quote ! {
7575 gen impl Drop for @Self {
7676 fn drop( & mut self ) {
77+ use zeroize:: AssertZeroize ;
78+ use zeroize:: AssertZeroizeOnDrop ;
7779 match self {
7880 #zeroizers
7981 }
@@ -251,7 +253,7 @@ impl ZeroizeAttrs {
251253 }
252254}
253255
254- fn generate_fields ( s : & mut synstructure:: Structure < ' _ > ) -> TokenStream {
256+ fn generate_fields ( s : & mut synstructure:: Structure < ' _ > , method : TokenStream ) -> TokenStream {
255257 s. bind_with ( |_| BindStyle :: RefMut ) ;
256258
257259 s. filter_variants ( |vi| {
@@ -265,7 +267,7 @@ fn generate_fields(s: &mut synstructure::Structure<'_>) -> TokenStream {
265267 result
266268 } )
267269 . filter ( |bi| filter_skip ( & bi. ast ( ) . attrs , true ) )
268- . each ( |bi| quote ! { #bi. zeroize ( ) ; } )
270+ . each ( |bi| quote ! { #bi. #method ( ) ; } )
269271}
270272
271273fn filter_skip ( attrs : & [ Attribute ] , start : bool ) -> bool {
@@ -291,7 +293,7 @@ fn filter_skip(attrs: &[Attribute], start: bool) -> bool {
291293
292294/// Custom derive for `Zeroize` (without `Drop`)
293295fn derive_zeroize_without_drop ( mut s : synstructure:: Structure < ' _ > ) -> TokenStream {
294- let zeroizers = generate_fields ( & mut s) ;
296+ let zeroizers = generate_fields ( & mut s, quote ! { zeroize } ) ;
295297
296298 s. bound_impl (
297299 quote ! ( zeroize:: Zeroize ) ,
@@ -507,15 +509,17 @@ mod tests {
507509 const _DERIVE_Drop_FOR_Z: ( ) = {
508510 impl Drop for Z {
509511 fn drop( & mut self ) {
512+ use zeroize:: AssertZeroize ;
513+ use zeroize:: AssertZeroizeOnDrop ;
510514 match self {
511515 Z {
512516 a: ref mut __binding_0,
513517 b: ref mut __binding_1,
514518 c: ref mut __binding_2,
515519 } => {
516- { __binding_0. zeroize ( ) ; }
517- { __binding_1. zeroize ( ) ; }
518- { __binding_2. zeroize ( ) ; }
520+ { __binding_0. zeroize_or_on_drop ( ) ; }
521+ { __binding_1. zeroize_or_on_drop ( ) ; }
522+ { __binding_2. zeroize_or_on_drop ( ) ; }
519523 }
520524 }
521525 }
0 commit comments