@@ -238,10 +238,10 @@ pub fn gen_impl_trait_from_str(
238
238
}
239
239
}
240
240
241
- pub fn gen_impl_trait_serde_serialize ( type_name : & TypeName ) -> TokenStream {
241
+ pub fn gen_impl_trait_serde_serialize ( type_name : & TypeName , generics : & Generics ) -> TokenStream {
242
242
let type_name_str = type_name. to_string ( ) ;
243
243
quote ! {
244
- impl :: serde:: Serialize for #type_name {
244
+ impl #generics :: serde:: Serialize for #type_name #generics {
245
245
fn serialize<S >( & self , serializer: S ) -> :: core:: result:: Result <S :: Ok , S :: Error >
246
246
where
247
247
S : :: serde:: Serializer
@@ -254,6 +254,7 @@ pub fn gen_impl_trait_serde_serialize(type_name: &TypeName) -> TokenStream {
254
254
255
255
pub fn gen_impl_trait_serde_deserialize (
256
256
type_name : & TypeName ,
257
+ type_generics : & Generics ,
257
258
inner_type : impl Into < InnerType > ,
258
259
maybe_error_type_name : Option < & ErrorTypeName > ,
259
260
) -> TokenStream {
@@ -276,16 +277,23 @@ pub fn gen_impl_trait_serde_deserialize(
276
277
let expecting_str = format ! ( "tuple struct {type_name}" ) ;
277
278
let type_name_str = type_name. to_string ( ) ;
278
279
280
+ // type generics + 'de lifetime for Deserialize
281
+ let all_generics = {
282
+ let mut all_generics = type_generics. clone ( ) ;
283
+ all_generics. params . push ( syn:: parse_quote!( ' de) ) ;
284
+ all_generics
285
+ } ;
286
+
279
287
quote ! {
280
- impl < ' de> :: serde:: Deserialize <' de> for #type_name {
288
+ impl #all_generics :: serde:: Deserialize <' de> for #type_name #type_generics {
281
289
fn deserialize<D : :: serde:: Deserializer <' de>>( deserializer: D ) -> Result <Self , D :: Error > {
282
- struct __Visitor< ' de> {
283
- marker: :: std:: marker:: PhantomData <#type_name>,
290
+ struct __Visitor #all_generics {
291
+ marker: :: std:: marker:: PhantomData <#type_name #type_generics >,
284
292
lifetime: :: std:: marker:: PhantomData <& ' de ( ) >,
285
293
}
286
294
287
- impl < ' de> :: serde:: de:: Visitor <' de> for __Visitor< ' de> {
288
- type Value = #type_name;
295
+ impl #all_generics :: serde:: de:: Visitor <' de> for __Visitor #all_generics {
296
+ type Value = #type_name #type_generics ;
289
297
290
298
fn expecting( & self , formatter: & mut :: core:: fmt:: Formatter ) -> :: core:: fmt:: Result {
291
299
write!( formatter, #expecting_str)
0 commit comments