From 76cca814f07b6abd9b1793424df02bab7b6a098f Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Mon, 7 Sep 2015 13:10:23 -0700 Subject: [PATCH] docs(readme): Improve the readme --- README.md | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8010784e..6c4f07fc 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ Documentation is available at: * [serde\_json](https://serde-rs.github.io/serde/serde_json/serde_json/index.html) * [serde\_codegen](https://serde-rs.github.io/serde/serde_codegen/serde_codegen/index.html) -Using Serde -=========== +Using Serde with Nightly Rust and serde\_macros +=============================================== Here is a simple example that demonstrates how to use Serde by serializing and deserializing to JSON. Serde comes with some powerful code generation libraries @@ -76,6 +76,9 @@ When run, it produces: Point { x: 1, y: 2 } ``` +Using Serde with Stable Rust, syntex, and serde\_codegen +======================================================== + Stable Rust is a little more complicated because it does not yet support compiler plugins. Instead we need to use the code generation library [syntex](https://github.com/erickt/rust-syntex) for this: @@ -215,6 +218,19 @@ include!(concat!(env!("OUT_DIR"), "/main.rs")); The `src/main.rs.in` is the same as before. +Then to run with stable: + +``` +% cargo build +... +``` + +Or with nightly: + +```rust +% cargo build --features nightly --no-default-features +... + Serialization without Macros ============================ @@ -311,6 +327,8 @@ as a named map. Its visitor uses a simple state machine to iterate through all the fields: ```rust +extern crate serde; + struct Point { x: i32, y: i32, @@ -479,6 +497,13 @@ deserializes an enum variant from a string. So for our `Point` example from before, we need to generate: ```rust +extern crate serde; + +struct Point { + x: i32, + y: i32, +} + enum PointField { X, Y, @@ -507,11 +532,7 @@ impl serde::Deserialize for PointField { deserializer.visit(PointFieldVisitor) } } -``` -This is then used in our actual deserializer: - -```rust impl serde::Deserialize for Point { fn deserialize(deserializer: &mut D) -> Result where D: serde::de::Deserializer