mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-17 15:01:03 +00:00
Adds serializer format specific field names
Allows different field names to be used for different external formats.
Field names are specified using the `rename` field attribute, e.g:
#[serde(rename(xml= "a4", json="a5"))]
Reverts #62
Addresses #61
This commit is contained in:
@@ -21,9 +21,9 @@ struct Rename {
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
struct DirectionRename {
|
||||
struct FormatRename {
|
||||
a1: i32,
|
||||
#[serde(rename_serialize="a3", rename_deserialize="a4")]
|
||||
#[serde(rename(xml= "a4", json="a5"))]
|
||||
a2: i32,
|
||||
}
|
||||
|
||||
@@ -47,11 +47,11 @@ fn test_rename() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_direction_rename() {
|
||||
let value = DirectionRename { a1: 1, a2: 2 };
|
||||
fn test_format_rename() {
|
||||
let value = FormatRename { a1: 1, a2: 2 };
|
||||
let serialized_value = json::to_string(&value).unwrap();
|
||||
assert_eq!(serialized_value, "{\"a1\":1,\"a3\":2}");
|
||||
assert_eq!(serialized_value, "{\"a1\":1,\"a5\":2}");
|
||||
|
||||
let deserialized_value = json::from_str("{\"a1\":1,\"a4\":2}").unwrap();
|
||||
let deserialized_value = json::from_str("{\"a1\":1,\"a5\":2}").unwrap();
|
||||
assert_eq!(value, deserialized_value);
|
||||
}
|
||||
|
||||
+24
-1
@@ -1024,7 +1024,7 @@ fn test_missing_field() {
|
||||
fn test_missing_renamed_field() {
|
||||
#[derive(Debug, PartialEq, Deserialize)]
|
||||
struct Foo {
|
||||
#[serde(rename_deserialize="y")]
|
||||
#[serde(rename="y")]
|
||||
x: Option<u32>,
|
||||
}
|
||||
|
||||
@@ -1042,3 +1042,26 @@ fn test_missing_renamed_field() {
|
||||
))).unwrap();
|
||||
assert_eq!(value, Foo { x: Some(5) });
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_missing_fmt_renamed_field() {
|
||||
#[derive(Debug, PartialEq, Deserialize)]
|
||||
struct Foo {
|
||||
#[serde(rename(json="y", value="z"))]
|
||||
x: Option<u32>,
|
||||
}
|
||||
|
||||
let value: Foo = from_str("{}").unwrap();
|
||||
assert_eq!(value, Foo { x: None });
|
||||
|
||||
let value: Foo = from_str("{\"y\": 5}").unwrap();
|
||||
assert_eq!(value, Foo { x: Some(5) });
|
||||
|
||||
let value: Foo = from_value(Value::Object(treemap!())).unwrap();
|
||||
assert_eq!(value, Foo { x: None });
|
||||
|
||||
let value : Foo = from_value(Value::Object(treemap!(
|
||||
"z".to_string() => Value::I64(5)
|
||||
))).unwrap();
|
||||
assert_eq!(value, Foo { x: Some(5) });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user