From ddc4b50d4dc58f76e437f420237865a397aacd5a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 9 Jan 2018 20:34:29 -0800 Subject: [PATCH] Use call_site in 'with' attribute --- serde_derive_internals/Cargo.toml | 1 + serde_derive_internals/src/attr.rs | 10 ++++++---- serde_derive_internals/src/lib.rs | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/serde_derive_internals/Cargo.toml b/serde_derive_internals/Cargo.toml index ac601190..74888f37 100644 --- a/serde_derive_internals/Cargo.toml +++ b/serde_derive_internals/Cargo.toml @@ -12,6 +12,7 @@ readme = "README.md" include = ["Cargo.toml", "src/**/*.rs", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] [dependencies] +proc-macro2 = "0.2" syn = { version = "0.12", default-features = false, features = ["derive", "parsing", "clone-impls"] } [badges] diff --git a/serde_derive_internals/src/attr.rs b/serde_derive_internals/src/attr.rs index bfb7811e..1d289bd3 100644 --- a/serde_derive_internals/src/attr.rs +++ b/serde_derive_internals/src/attr.rs @@ -8,12 +8,14 @@ use Ctxt; use syn; +use syn::Ident; use syn::Meta::{List, NameValue, Word}; use syn::NestedMeta::{Literal, Meta}; use syn::punctuated::Punctuated; use syn::synom::Synom; use std::collections::BTreeSet; use std::str::FromStr; +use proc_macro2::Span; // This module handles parsing of `#[serde(...)]` attributes. The entrypoints // are `attr::Container::from_ast`, `attr::Variant::from_ast`, and @@ -577,10 +579,10 @@ impl Variant { Meta(NameValue(ref m)) if m.ident == "with" => { if let Ok(path) = parse_lit_into_path(cx, m.ident.as_ref(), &m.lit) { let mut ser_path = path.clone(); - ser_path.segments.push("serialize".into()); + ser_path.segments.push(Ident::new("serialize", Span::call_site()).into()); serialize_with.set(ser_path); let mut de_path = path; - de_path.segments.push("deserialize".into()); + de_path.segments.push(Ident::new("deserialize", Span::call_site()).into()); deserialize_with.set(de_path); } } @@ -819,10 +821,10 @@ impl Field { Meta(NameValue(ref m)) if m.ident == "with" => { if let Ok(path) = parse_lit_into_path(cx, m.ident.as_ref(), &m.lit) { let mut ser_path = path.clone(); - ser_path.segments.push("serialize".into()); + ser_path.segments.push(Ident::new("serialize", Span::call_site()).into()); serialize_with.set(ser_path); let mut de_path = path; - de_path.segments.push("deserialize".into()); + de_path.segments.push(Ident::new("deserialize", Span::call_site()).into()); deserialize_with.set(de_path); } } diff --git a/serde_derive_internals/src/lib.rs b/serde_derive_internals/src/lib.rs index dd19ecaf..c1630a9e 100644 --- a/serde_derive_internals/src/lib.rs +++ b/serde_derive_internals/src/lib.rs @@ -12,6 +12,8 @@ #[macro_use] extern crate syn; +extern crate proc_macro2; + pub mod ast; pub mod attr;