diff --git a/examples/serde-syntex-example/.gitignore b/examples/serde-syntex-example/.gitignore new file mode 100644 index 00000000..a9d37c56 --- /dev/null +++ b/examples/serde-syntex-example/.gitignore @@ -0,0 +1,2 @@ +target +Cargo.lock diff --git a/examples/serde-syntex-example/Cargo.toml b/examples/serde-syntex-example/Cargo.toml new file mode 100644 index 00000000..81fdbad3 --- /dev/null +++ b/examples/serde-syntex-example/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "serde-syntex-example" +version = "0.1.0" +authors = ["Erick Tryzelaar "] +build = "build.rs" + +[features] +default = ["serde_codegen"] +nightly = ["serde_macros"] + +[build-dependencies] +serde_codegen = { version = "^0.6.4", optional = true } +syntex = "^0.22.0" + +[dependencies] +serde = "^0.6.1" +serde_json = "^0.6.0" +serde_macros = { version = "^0.6.1", optional = true } diff --git a/examples/serde-syntex-example/README.md b/examples/serde-syntex-example/README.md new file mode 100644 index 00000000..ea919313 --- /dev/null +++ b/examples/serde-syntex-example/README.md @@ -0,0 +1,20 @@ +This example demonstrates how to use Serde with Syntex. On stable or nightly +with Syntex, it can be built with: + +``` +% multirust run stable cargo run + Running `target/debug/serde-syntex-example` +{"x":1,"y":2} +Point { x: 1, y: 2 } + +% multirust run nightly cargo run + Running `target/debug/serde-syntex-example` +{"x":1,"y":2} +Point { x: 1, y: 2 } +``` + +On nightly, it can use a plugin with: + +``` +% multirust run nightly cargo run --features nightly --no-default-features +``` diff --git a/examples/serde-syntex-example/build.rs b/examples/serde-syntex-example/build.rs new file mode 100644 index 00000000..b1aadd78 --- /dev/null +++ b/examples/serde-syntex-example/build.rs @@ -0,0 +1,29 @@ +#[cfg(not(feature = "serde_macros"))] +mod inner { + extern crate syntex; + extern crate serde_codegen; + + use std::env; + use std::path::Path; + + pub fn main() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + + let src = Path::new("src/main.rs.in"); + let dst = Path::new(&out_dir).join("main.rs"); + + let mut registry = syntex::Registry::new(); + + serde_codegen::register(&mut registry); + registry.expand("", &src, &dst).unwrap(); + } +} + +#[cfg(feature = "serde_macros")] +mod inner { + pub fn main() {} +} + +fn main() { + inner::main(); +} diff --git a/examples/serde-syntex-example/src/main.rs b/examples/serde-syntex-example/src/main.rs new file mode 100644 index 00000000..9c2333fb --- /dev/null +++ b/examples/serde-syntex-example/src/main.rs @@ -0,0 +1,11 @@ +#![cfg_attr(nightly, feature(custom_derive, plugin))] +#![cfg_attr(nightly, plugin(serde_macros))] + +extern crate serde; +extern crate serde_json; + +#[cfg(feature = "serde_macros")] +include!("main.rs.in"); + +#[cfg(not(feature = "serde_macros"))] +include!(concat!(env!("OUT_DIR"), "/main.rs")); diff --git a/examples/serde-syntex-example/src/main.rs.in b/examples/serde-syntex-example/src/main.rs.in new file mode 100644 index 00000000..4cf4841c --- /dev/null +++ b/examples/serde-syntex-example/src/main.rs.in @@ -0,0 +1,16 @@ +#[derive(Serialize, Deserialize, Debug)] +struct Point { + x: i32, + y: i32, +} + +fn main() { + let point = Point { x: 1, y: 2 }; + let serialized = serde_json::to_string(&point).unwrap(); + + println!("{}", serialized); + + let deserialized: Point = serde_json::from_str(&serialized).unwrap(); + + println!("{:?}", deserialized); +} diff --git a/serde_codegen/Cargo.toml b/serde_codegen/Cargo.toml index 9ec8d8e8..b799eb00 100644 --- a/serde_codegen/Cargo.toml +++ b/serde_codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "serde_codegen" -version = "0.6.2" +version = "0.6.5" authors = ["Erick Tryzelaar "] license = "MIT/Apache-2.0" description = "Macros to auto-generate implementations for the serde framework" @@ -15,12 +15,12 @@ nightly = ["quasi_macros"] with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"] [build-dependencies] -quasi_codegen = { version = "^0.3.6", optional = true } -syntex = { version = "^0.17.0", optional = true } +quasi_codegen = { verision = "^0.3.8", optional = true } +syntex = { version = "^0.22.0", optional = true } [dependencies] -aster = { version = "^0.6.0", default-features = false } -quasi = { version = "^0.3.5", default-features = false } -quasi_macros = { version = "^0.3.5", optional = true } -syntex = { version = "^0.17.0", optional = true } -syntex_syntax = { version = "^0.19.1", optional = true } +aster = { version = "^0.8.0", default-features = false } +quasi = { verision = "^0.3.8", default-features = false } +quasi_macros = { version = "^0.3.8", optional = true } +syntex = { version = "^0.22.0", optional = true } +syntex_syntax = { version = "^0.22.0", optional = true } diff --git a/serde_codegen/src/de.rs b/serde_codegen/src/de.rs index 02aa0d60..2475b46f 100644 --- a/serde_codegen/src/de.rs +++ b/serde_codegen/src/de.rs @@ -65,7 +65,6 @@ pub fn expand_derive_deserialize( let where_clause = &impl_generics.where_clause; let impl_item = quote_item!(cx, - #[automatically_derived] impl $impl_generics ::serde::de::Deserialize for $ty $where_clause { fn deserialize<__D>(deserializer: &mut __D) -> ::std::result::Result<$ty, __D::Error> where __D: ::serde::de::Deserializer, diff --git a/serde_codegen/src/lib.rs b/serde_codegen/src/lib.rs index 0deaecb5..af94ac5d 100644 --- a/serde_codegen/src/lib.rs +++ b/serde_codegen/src/lib.rs @@ -14,7 +14,7 @@ extern crate syntex_syntax as syntax; extern crate syntax; #[cfg(not(feature = "with-syntex"))] -extern crate rustc; +extern crate rustc_plugin; #[cfg(feature = "with-syntex")] include!(concat!(env!("OUT_DIR"), "/lib.rs")); @@ -60,7 +60,7 @@ pub fn register(reg: &mut syntex::Registry) { } #[cfg(not(feature = "with-syntex"))] -pub fn register(reg: &mut rustc::plugin::Registry) { +pub fn register(reg: &mut rustc_plugin::Registry) { reg.register_syntax_extension( syntax::parse::token::intern("derive_Serialize"), syntax::ext::base::MultiDecorator( diff --git a/serde_codegen/src/ser.rs b/serde_codegen/src/ser.rs index 2b4acdf7..f073488f 100644 --- a/serde_codegen/src/ser.rs +++ b/serde_codegen/src/ser.rs @@ -60,7 +60,6 @@ pub fn expand_derive_serialize( let where_clause = &impl_generics.where_clause; let impl_item = quote_item!(cx, - #[automatically_derived] impl $impl_generics ::serde::ser::Serialize for $ty $where_clause { fn serialize<__S>(&self, serializer: &mut __S) -> ::std::result::Result<(), __S::Error> where __S: ::serde::ser::Serializer, diff --git a/serde_macros/Cargo.toml b/serde_macros/Cargo.toml index 6bbfdd4c..e89f4017 100644 --- a/serde_macros/Cargo.toml +++ b/serde_macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "serde_macros" -version = "0.6.1" +version = "0.6.5" authors = ["Erick Tryzelaar "] license = "MIT/Apache-2.0" description = "Macros to auto-generate implementations for the serde framework" diff --git a/serde_macros/src/lib.rs b/serde_macros/src/lib.rs index a01d1341..17e39bb4 100644 --- a/serde_macros/src/lib.rs +++ b/serde_macros/src/lib.rs @@ -1,10 +1,10 @@ #![feature(plugin_registrar, rustc_private)] extern crate serde_codegen; -extern crate rustc; +extern crate rustc_plugin; #[plugin_registrar] #[doc(hidden)] -pub fn plugin_registrar(reg: &mut rustc::plugin::Registry) { +pub fn plugin_registrar(reg: &mut rustc_plugin::Registry) { serde_codegen::register(reg); } diff --git a/serde_tests/Cargo.toml b/serde_tests/Cargo.toml index 8eb41025..86977330 100644 --- a/serde_tests/Cargo.toml +++ b/serde_tests/Cargo.toml @@ -11,15 +11,15 @@ keywords = ["serialization"] build = "build.rs" [build-dependencies] -syntex = { version = "^0.17.0" } -syntex_syntax = { version = "^0.19.1" } +syntex = { version = "^0.22.0" } +syntex_syntax = { version = "^0.22.0" } serde_codegen = { version = "*", path = "../serde_codegen", features = ["with-syntex"] } [dev-dependencies] num = "^0.1.27" rustc-serialize = "^0.3.16" serde = { version = "*", path = "../serde" } -syntex = "^0.17.0" +syntex = "^0.22.0" [[test]] name = "test"