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;