From 2cd49060fa2ae49164259925060aa82ec9733c05 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Wed, 1 Apr 2015 22:14:28 -0700 Subject: [PATCH] Rename #[serde(alias)] to #[serde(rename)] and add tests Closes #9 and #47. --- serde_macros/src/field.rs | 8 ++++---- tests/test_annotations.rs | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 tests/test_annotations.rs diff --git a/serde_macros/src/field.rs b/serde_macros/src/field.rs index f8b14e3d..7ca6f1fe 100644 --- a/serde_macros/src/field.rs +++ b/serde_macros/src/field.rs @@ -5,7 +5,7 @@ use syntax::ptr::P; use aster; -fn field_alias(field: &ast::StructField) -> Option<&ast::Lit> { +fn field_rename(field: &ast::StructField) -> Option<&ast::Lit> { field.node.attrs.iter() .find(|sa| { if let ast::MetaList(ref n, _) = sa.node.value.node { @@ -19,7 +19,7 @@ fn field_alias(field: &ast::StructField) -> Option<&ast::Lit> { attr::mark_used(&sa); vals.iter().fold(None, |v, mi| { if let ast::MetaNameValue(ref n, ref lit) = mi.node { - if n == &"alias" { + if n == &"rename" { Some(lit) } else { v @@ -41,8 +41,8 @@ pub fn struct_field_strs( ) -> Vec> { struct_def.fields.iter() .map(|field| { - match field_alias(field) { - Some(alias) => builder.expr().build_lit(P(alias.clone())), + match field_rename(field) { + Some(rename) => builder.expr().build_lit(P(rename.clone())), None => { match field.node.kind { ast::NamedField(name, _) => { diff --git a/tests/test_annotations.rs b/tests/test_annotations.rs new file mode 100644 index 00000000..af603df3 --- /dev/null +++ b/tests/test_annotations.rs @@ -0,0 +1,40 @@ +#![feature(custom_attribute, custom_derive, plugin, test)] +#![plugin(serde_macros)] + +extern crate test; +extern crate serde; + +use serde::json; + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +struct Default { + a1: i32, + #[serde(default)] + a2: i32, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +struct Rename { + a1: i32, + #[serde(rename="a3")] + a2: i32, +} + +#[test] +fn test_default() { + let deserialized_value: Default = json::from_str(&"{\"a1\":1,\"a2\":2}").unwrap(); + assert_eq!(deserialized_value, Default { a1: 1, a2: 2 }); + + let deserialized_value: Default = json::from_str(&"{\"a1\":1}").unwrap(); + assert_eq!(deserialized_value, Default { a1: 1, a2: 0 }); +} + +#[test] +fn test_rename() { + let value = Rename { a1: 1, a2: 2 }; + let serialized_value = json::to_string(&value).unwrap(); + assert_eq!(serialized_value, "{\"a1\":1,\"a3\":2}"); + + let deserialized_value: Rename = json::from_str(&serialized_value).unwrap(); + assert_eq!(value, deserialized_value); +}