@@ -410,16 +410,29 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
410410 let this_type = & params. this_type ;
411411 let this_value = & params. this_value ;
412412 let type_name = cattrs. name ( ) . deserialize_name ( ) ;
413+ let ( de_impl_generics, de_ty_generics, ty_generics, where_clause) =
414+ split_with_de_lifetime ( params) ;
415+ let delife = params. borrowed . de_lifetime ( ) ;
413416
414417 let expecting = format ! ( "unit struct {}" , params. type_name( ) ) ;
415418 let expecting = cattrs. expecting ( ) . unwrap_or ( & expecting) ;
416419
420+ let visitor_expr = quote ! {
421+ __Visitor {
422+ marker: _serde:: __private:: PhantomData :: <#this_type #ty_generics>,
423+ lifetime: _serde:: __private:: PhantomData ,
424+ }
425+ } ;
426+
417427 quote_block ! {
418428 #[ doc( hidden) ]
419- struct __Visitor;
429+ struct __Visitor #de_impl_generics #where_clause {
430+ marker: _serde:: __private:: PhantomData <#this_type #ty_generics>,
431+ lifetime: _serde:: __private:: PhantomData <& #delife ( ) >,
432+ }
420433
421- impl < ' de> _serde:: de:: Visitor <' de > for __Visitor {
422- type Value = #this_type;
434+ impl #de_impl_generics _serde:: de:: Visitor <#delife > for __Visitor #de_ty_generics #where_clause {
435+ type Value = #this_type #ty_generics ;
423436
424437 fn expecting( & self , __formatter: & mut _serde:: __private:: Formatter ) -> _serde:: __private:: fmt:: Result {
425438 _serde:: __private:: Formatter :: write_str( __formatter, #expecting)
@@ -434,7 +447,7 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
434447 }
435448 }
436449
437- _serde:: Deserializer :: deserialize_unit_struct( __deserializer, #type_name, __Visitor )
450+ _serde:: Deserializer :: deserialize_unit_struct( __deserializer, #type_name, #visitor_expr )
438451 }
439452}
440453
0 commit comments