@@ -410,16 +410,29 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
410
410
let this_type = & params. this_type ;
411
411
let this_value = & params. this_value ;
412
412
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 ( ) ;
413
416
414
417
let expecting = format ! ( "unit struct {}" , params. type_name( ) ) ;
415
418
let expecting = cattrs. expecting ( ) . unwrap_or ( & expecting) ;
416
419
420
+ let visitor_expr = quote ! {
421
+ __Visitor {
422
+ marker: _serde:: __private:: PhantomData :: <#this_type #ty_generics>,
423
+ lifetime: _serde:: __private:: PhantomData ,
424
+ }
425
+ } ;
426
+
417
427
quote_block ! {
418
428
#[ 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
+ }
420
433
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 ;
423
436
424
437
fn expecting( & self , __formatter: & mut _serde:: __private:: Formatter ) -> _serde:: __private:: fmt:: Result {
425
438
_serde:: __private:: Formatter :: write_str( __formatter, #expecting)
@@ -434,7 +447,7 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
434
447
}
435
448
}
436
449
437
- _serde:: Deserializer :: deserialize_unit_struct( __deserializer, #type_name, __Visitor )
450
+ _serde:: Deserializer :: deserialize_unit_struct( __deserializer, #type_name, #visitor_expr )
438
451
}
439
452
}
440
453
0 commit comments