Compare commits

...

6 Commits

Author SHA1 Message Date
David Tolnay 85c95040b3 Release 0.8.12 2016-10-08 15:38:29 -07:00
David Tolnay 339c0f5493 Remove unneeded test feature 2016-10-08 15:36:46 -07:00
David Tolnay b4d5c26f4e Update to latest syn and quote 2016-10-08 15:36:02 -07:00
David Tolnay f4e1ffa2cb Merge pull request #578 from mjroghelia/rename_rustc_macro
Rename rustc_macro to proc_macro
2016-10-08 15:35:15 -07:00
Mark Roghelia ef5d09e144 Rename rustc_macro to proc_macro
Fixes #575
2016-10-08 18:29:36 -04:00
David Tolnay e547a06639 Simplify deserialize_field_visitor 2016-10-03 13:45:11 -07:00
24 changed files with 64 additions and 69 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ You may be looking for:
## Serde in action
```rust
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
+1 -1
View File
@@ -1,4 +1,4 @@
#![cfg_attr(feature = "serde_derive", feature(rustc_macro))]
#![cfg_attr(feature = "serde_derive", feature(proc_macro))]
#[cfg(feature = "serde_derive")]
#[macro_use]
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "serde"
version = "0.8.11"
version = "0.8.12"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "A generic serialization/deserialization framework"
+4 -4
View File
@@ -1,6 +1,6 @@
[package]
name = "serde_codegen"
version = "0.8.11"
version = "0.8.12"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "Macros to auto-generate implementations for the serde framework"
@@ -22,8 +22,8 @@ with-syn = []
[dependencies]
clippy = { version = "^0.*", optional = true }
quote = "0.2"
serde_codegen_internals = { version = "=0.9.0", default-features = false, path = "../serde_codegen_internals" }
syn = { version = "0.8", features = ["aster", "visit"] }
quote = "0.3"
serde_codegen_internals = { version = "=0.10.0", default-features = false, path = "../serde_codegen_internals" }
syn = { version = "0.9", features = ["aster", "visit"] }
syntex = { version = "^0.44.0", optional = true }
syntex_syntax = { version = "^0.44.0", optional = true }
+20 -27
View File
@@ -185,17 +185,17 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) {
let ty_param_idents = if ty_param_idents.is_empty() {
None
} else {
Some(quote!(::<#(ty_param_idents),*>))
Some(quote!(::<#(#ty_param_idents),*>))
};
let phantom_exprs = iter::repeat(quote!(::std::marker::PhantomData)).take(num_phantoms);
(
quote! {
struct __Visitor #generics ( #(phantom_types),* ) #where_clause;
struct __Visitor #generics ( #(#phantom_types),* ) #where_clause;
},
quote!(__Visitor <#(all_params),*> ),
quote!(__Visitor #ty_param_idents ( #(phantom_exprs),* )),
quote!(__Visitor <#(#all_params),*> ),
quote!(__Visitor #ty_param_idents ( #(#phantom_exprs),* )),
)
}
}
@@ -358,17 +358,17 @@ fn deserialize_seq(
quote!(#ident: #value)
});
quote! {
#type_path { #(args),* }
#type_path { #(#args),* }
}
} else {
let args = (0..fields.len()).map(|i| aster::id(format!("__field{}", i)));
quote! {
#type_path ( #(args),* )
#type_path ( #(#args),* )
}
};
quote! {
#(let_values)*
#(#let_values)*
try!(visitor.end());
@@ -505,7 +505,7 @@ fn deserialize_item_enum(
let variant_names = variants.iter().map(|variant| variant.ident.to_string());
let variants_stmt = quote! {
const VARIANTS: &'static [&'static str] = &[ #(variant_names),* ];
const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ];
};
let ignored_arm = if item_attrs.deny_unknown_fields() {
@@ -551,7 +551,7 @@ fn deserialize_item_enum(
where __V: _serde::de::VariantVisitor,
{
match try!(visitor.visit_variant()) {
#(variant_arms)*
#(#variant_arms)*
}
}
}
@@ -678,7 +678,7 @@ fn deserialize_field_visitor(
let index_body = quote! {
match value {
#(index_field_arms)*
#(#index_field_arms)*
_ => #fallthrough_index_arm_expr
}
};
@@ -704,7 +704,7 @@ fn deserialize_field_visitor(
let str_body = quote! {
match value {
#(str_field_arms)*
#(#str_field_arms)*
_ => #fallthrough_str_arm_expr
}
};
@@ -732,20 +732,18 @@ fn deserialize_field_visitor(
let bytes_body = quote! {
match value {
#(bytes_field_arms)*
#(#bytes_field_arms)*
_ => #fallthrough_bytes_arm_expr
}
};
let field_enum = quote! {
quote! {
#[allow(non_camel_case_types)]
enum __Field {
#(field_idents,)*
#(#field_idents,)*
#ignore_variant
}
};
let impl_item = quote! {
impl _serde::de::Deserialize for __Field {
#[inline]
fn deserialize<__D>(deserializer: &mut __D) -> ::std::result::Result<__Field, __D::Error>
@@ -778,11 +776,6 @@ fn deserialize_field_visitor(
deserializer.deserialize_struct_field(__FieldVisitor)
}
}
};
quote! {
#field_enum
#impl_item
}
}
@@ -816,7 +809,7 @@ fn deserialize_struct_visitor(
});
let fields_stmt = quote! {
const FIELDS: &'static [&'static str] = &[ #(field_names),* ];
const FIELDS: &'static [&'static str] = &[ #(#field_names),* ];
};
(field_visitor, fields_stmt, visit_map)
@@ -929,21 +922,21 @@ fn deserialize_map(
});
quote! {
#(let_values)*
#(#let_values)*
while let Some(key) = try!(visitor.visit_key::<__Field>()) {
match key {
#(value_arms)*
#(skipped_arms)*
#(#value_arms)*
#(#skipped_arms)*
#ignored_arm
}
}
try!(visitor.end());
#(extract_values)*
#(#extract_values)*
Ok(#struct_path { #(result),* })
Ok(#struct_path { #(#result),* })
}
}
+3 -1
View File
@@ -201,7 +201,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
let mut de = false;
let item = syn::MacroInput {
attrs: item.attrs.into_iter().flat_map(|attr| {
if attr.is_sugared_doc {
if attr.is_sugared_doc || attr.style != syn::AttrStyle::Outer {
return Some(attr);
}
let (name, nested) = match attr.value {
@@ -210,6 +210,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
};
if name != "derive" {
return Some(syn::Attribute {
style: syn::AttrStyle::Outer,
value: syn::MetaItem::List(name, nested),
is_sugared_doc: false,
});
@@ -231,6 +232,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
None
} else {
Some(syn::Attribute {
style: syn::AttrStyle::Outer,
value: syn::MetaItem::List(name, rest),
is_sugared_doc: false,
})
+7 -7
View File
@@ -168,7 +168,7 @@ fn serialize_tuple_struct(
quote! {
let #let_mut __serde_state = try!(_serializer.serialize_tuple_struct(#type_name, #len));
#(serialize_stmts)*
#(#serialize_stmts)*
_serializer.serialize_tuple_struct_end(__serde_state)
}
}
@@ -209,7 +209,7 @@ fn serialize_struct(
quote! {
let #let_mut __serde_state = try!(_serializer.serialize_struct(#type_name, #len));
#(serialize_fields)*
#(#serialize_fields)*
_serializer.serialize_struct_end(__serde_state)
}
}
@@ -238,7 +238,7 @@ fn serialize_item_enum(
quote! {
match *self {
#(arms)*
#(#arms)*
}
}
}
@@ -290,7 +290,7 @@ fn serialize_variant(
})
.collect();
let pat = quote!(#type_ident::#variant_ident(#(field_names),*));
let pat = quote!(#type_ident::#variant_ident(#(#field_names),*));
let block = serialize_tuple_variant(
type_name,
@@ -313,7 +313,7 @@ fn serialize_variant(
};
quote!(ref #id)
});
let pat = quote!(#type_ident::#variant_ident { #(fields),* });
let pat = quote!(#type_ident::#variant_ident { #(#fields),* });
let block = serialize_struct_variant(
variant_index,
@@ -381,7 +381,7 @@ fn serialize_tuple_variant(
#variant_index,
#variant_name,
#len));
#(serialize_stmts)*
#(#serialize_stmts)*
_serializer.serialize_tuple_variant_end(__serde_state)
}
}
@@ -428,7 +428,7 @@ fn serialize_struct_variant(
#variant_name,
#len,
));
#(serialize_fields)*
#(#serialize_fields)*
_serializer.serialize_struct_variant_end(__serde_state)
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "serde_codegen_internals"
version = "0.9.0"
version = "0.10.0"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "AST representation used by Serde codegen. Unstable."
@@ -15,4 +15,4 @@ unstable-testing = ["clippy"]
[dependencies]
clippy = { version = "^0.*", optional = true }
syn = "0.8"
syn = "0.9"
+5 -5
View File
@@ -1,6 +1,6 @@
[package]
name = "serde_derive"
version = "0.8.11"
version = "0.8.12"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]"
@@ -12,10 +12,10 @@ include = ["Cargo.toml", "src/**/*.rs"]
[lib]
name = "serde_derive"
rustc-macro = true
proc-macro = true
[dependencies.serde_codegen]
version = "=0.8.11"
version = "=0.8.12"
path = "../serde_codegen"
default-features = false
features = ["with-syn"]
@@ -23,5 +23,5 @@ features = ["with-syn"]
[dev-dependencies]
compiletest_rs = "^0.2.0"
fnv = "1.0"
serde = { version = "0.8.11", path = "../serde" }
serde_test = { version = "0.8.11", path = "../serde_test" }
serde = { version = "0.8.12", path = "../serde" }
serde_test = { version = "0.8.12", path = "../serde_test" }
+5 -5
View File
@@ -1,12 +1,12 @@
#![feature(rustc_macro, rustc_macro_lib)]
#![feature(proc_macro, proc_macro_lib)]
#![cfg(not(test))]
extern crate rustc_macro;
extern crate proc_macro;
extern crate serde_codegen;
use rustc_macro::TokenStream;
use proc_macro::TokenStream;
#[rustc_macro_derive(Serialize)]
#[proc_macro_derive(Serialize)]
pub fn derive_serialize(input: TokenStream) -> TokenStream {
let item = format!("#[derive(Serialize)]\n{}", input);
match serde_codegen::expand_single_item(&item) {
@@ -15,7 +15,7 @@ pub fn derive_serialize(input: TokenStream) -> TokenStream {
}
}
#[rustc_macro_derive(Deserialize)]
#[proc_macro_derive(Deserialize)]
pub fn derive_deserialize(input: TokenStream) -> TokenStream {
let item = format!("#[derive(Deserialize)]\n{}", input);
match serde_codegen::expand_single_item(&item) {
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#[macro_use]
extern crate serde_derive;
+1 -1
View File
@@ -1,4 +1,4 @@
#![feature(rustc_macro)]
#![feature(proc_macro)]
#![deny(identity_op)]
#[macro_use]
+1 -1
View File
@@ -1,4 +1,4 @@
#![feature(test, rustc_macro, rustc_attrs)]
#![feature(test, proc_macro)]
#[macro_use]
extern crate serde_derive;
+2 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "serde_test"
version = "0.8.11"
version = "0.8.12"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "Token De/Serializer for testing De/Serialize implementations"
@@ -12,4 +12,4 @@ keywords = ["serde", "serialization"]
include = ["Cargo.toml", "src/**/*.rs"]
[dependencies]
serde = { version = "0.8.11", path = "../serde" }
serde = { version = "0.8.12", path = "../serde" }
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "serde_testing"
version = "0.8.11"
version = "0.8.12"
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
license = "MIT/Apache-2.0"
description = "A generic serialization/deserialization framework"