Ask proc_macro_derive to ignore serde attributes

This commit is contained in:
David Tolnay
2016-11-15 21:29:34 -05:00
parent 133d117bf4
commit a16f07858b
4 changed files with 22 additions and 88 deletions
-3
View File
@@ -14,9 +14,6 @@ include = ["Cargo.toml", "src/**/*.rs"]
name = "serde_derive"
proc-macro = true
[dependencies]
post-expansion = "0.2.0"
[dependencies.serde_codegen]
version = "=0.8.17"
path = "../serde_codegen"
+4 -11
View File
@@ -4,27 +4,20 @@
extern crate proc_macro;
extern crate serde_codegen;
#[macro_use]
extern crate post_expansion;
use proc_macro::TokenStream;
#[proc_macro_derive(Serialize)]
#[proc_macro_derive(Serialize, attributes(serde))]
pub fn derive_serialize(input: TokenStream) -> TokenStream {
let item = format!("#[derive(Serialize)]\n{}", input);
match serde_codegen::expand_single_item(&item) {
match serde_codegen::expand_derive_serialize(&input.to_string()) {
Ok(expanded) => expanded.parse().unwrap(),
Err(msg) => panic!(msg),
}
}
#[proc_macro_derive(Deserialize)]
#[proc_macro_derive(Deserialize, attributes(serde))]
pub fn derive_deserialize(input: TokenStream) -> TokenStream {
let item = format!("#[derive(Deserialize)]\n{}", input);
match serde_codegen::expand_single_item(&item) {
match serde_codegen::expand_derive_deserialize(&input.to_string()) {
Ok(expanded) => expanded.parse().unwrap(),
Err(msg) => panic!(msg),
}
}
register_post_expansion!(PostExpansion_serde);