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,