From 2ba97394fb5e5c32b52ab8d82aed45b85fef0db7 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 25 Jan 2021 13:27:15 -0800 Subject: [PATCH] Substitute Self in output of Serialize derive --- serde_derive/src/lib.rs | 4 ++-- serde_derive/src/ser.rs | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/serde_derive/src/lib.rs b/serde_derive/src/lib.rs index f10baac0..8d1464ec 100644 --- a/serde_derive/src/lib.rs +++ b/serde_derive/src/lib.rs @@ -79,8 +79,8 @@ mod try; #[proc_macro_derive(Serialize, attributes(serde))] pub fn derive_serialize(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); - ser::expand_derive_serialize(&input) + let mut input = parse_macro_input!(input as DeriveInput); + ser::expand_derive_serialize(&mut input) .unwrap_or_else(to_compile_errors) .into() } diff --git a/serde_derive/src/ser.rs b/serde_derive/src/ser.rs index 91154dc6..c663c3b0 100644 --- a/serde_derive/src/ser.rs +++ b/serde_derive/src/ser.rs @@ -6,10 +6,14 @@ use bound; use dummy; use fragment::{Fragment, Match, Stmts}; use internals::ast::{Container, Data, Field, Style, Variant}; -use internals::{attr, Ctxt, Derive}; +use internals::{attr, replace_receiver, Ctxt, Derive}; use pretend; -pub fn expand_derive_serialize(input: &syn::DeriveInput) -> Result> { +pub fn expand_derive_serialize( + input: &mut syn::DeriveInput, +) -> Result> { + replace_receiver(input); + let ctxt = Ctxt::new(); let cont = match Container::from_ast(&ctxt, input, Derive::Serialize) { Some(cont) => cont,