Implement serialization for unit variants and named variants

This commit is contained in:
Aymeric Beringer
2019-10-11 16:32:09 +02:00
commit 353d0c07d4
6 changed files with 389 additions and 0 deletions

52
tests/serialize.rs Normal file
View File

@@ -0,0 +1,52 @@
use miniserde::{json, Serialize};
use miniserde_enum::Serialize_enum;
#[test]
fn test_internal() {
#[serde(tag = "type")]
#[derive(Serialize_enum)]
enum Internal {
A,
#[serde(rename = "renamedB")]
B,
C{x: i32},
}
use Internal::*;
let example = [A, B, C{x: 2}];
let actual = json::to_string(&example[..]);
let expected = r#"[{"type":"A"},{"type":"renamedB"},{"type":"C","x":2}]"#;
assert_eq!(actual, expected);
}
#[test]
fn test_external() {
#[derive(Serialize_enum)]
enum External {
A,
#[serde(rename = "renamedB")]
B,
C{x: i32},
}
use External::*;
let example = [A, B, C{x: 2}];
let actual = json::to_string(&example[..]);
let expected = r#"["A","renamedB",{"C":{"x":2}}]"#;
assert_eq!(actual, expected);
}
#[test]
fn test_untagged() {
#[serde(untagged)]
#[derive(Serialize_enum)]
enum Untagged {
A,
#[serde(rename = "renamedB")]
B,
C{x: i32},
}
use Untagged::*;
let example = [A, B, C{x: 2}];
let actual = json::to_string(&example[..]);
let expected = r#"["A","renamedB",{"x":2}]"#;
assert_eq!(actual, expected);
}