Skip to content

Commit ffd13b5

Browse files
authored
Fix serde for unit variant (#25)
1 parent e7dbee4 commit ffd13b5

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
authors = ["ImJeremyHe<[email protected]>"]
33
edition = "2018"
44
name = "gents"
5-
version = "1.0.1"
5+
version = "1.0.2"
66
license = "MIT"
77
description = "generate Typescript interfaces from Rust code"
88
repository = "https://github.com/ImJeremyHe/gents"

derives/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "gents_derives"
3-
version = "1.0.1"
3+
version = "1.0.2"
44
description = "provides some macros for gents"
55
authors = ["ImJeremyHe<[email protected]>"]
66
license = "MIT"

derives/src/serde_json.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ fn get_serde_enum_impl_block(
6161
quote! {
6262
#[derive(::gents::serde::Serialize, ::gents::serde::Deserialize)]
6363
#[serde(rename_all = "camelCase")]
64-
#[serde(untagged)]
6564
enum #unit_ident {
6665
#(#fields)*
6766
}

tests/src/lib.rs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,83 @@ mod tests;
55
#[allow(dead_code)]
66
#[cfg(test)]
77
mod serde_test;
8+
9+
#[derive(Debug, Clone, gents_derives::TS)]
10+
#[ts(file_name = "a.ts", rename_all = "camelCase")]
11+
pub enum VerticalAlignment {
12+
Center,
13+
Top,
14+
Bottom,
15+
Justify,
16+
Distributed,
17+
}
18+
19+
#[test]
20+
fn test_unit_enum_serde() {
21+
let vertical_alignment = VerticalAlignment::Center;
22+
let json = serde_json::to_string(&vertical_alignment).unwrap();
23+
assert_eq!(json, "\"center\"");
24+
let vertical_alignment = serde_json::from_str::<VerticalAlignment>("\"center\"").unwrap();
25+
assert!(matches!(vertical_alignment, VerticalAlignment::Center));
26+
}
27+
28+
#[derive(Debug, Clone, gents_derives::TS)]
29+
#[ts(file_name = "b.ts", rename_all = "camelCase")]
30+
pub struct User {
31+
pub id: u32,
32+
pub name: String,
33+
}
34+
35+
#[test]
36+
fn test_struct_serde() {
37+
let user = User {
38+
id: 1,
39+
name: "test".to_string(),
40+
};
41+
let json = serde_json::to_string(&user).unwrap();
42+
assert_eq!(json, "{\"id\":1,\"name\":\"test\"}");
43+
let user = serde_json::from_str::<User>("{\"id\":1,\"name\":\"test\"}").unwrap();
44+
assert_eq!(user.id, 1);
45+
assert_eq!(user.name, "test");
46+
}
47+
48+
#[derive(Debug, Clone, gents_derives::TS)]
49+
#[ts(file_name = "c.ts", rename_all = "camelCase", tag = "type")]
50+
pub enum TestEnum {
51+
Center,
52+
Top,
53+
Bottom,
54+
Justify,
55+
Distributed,
56+
Unknown(User),
57+
}
58+
59+
#[test]
60+
fn test_struct_tagged_enum_serde() {
61+
let center = TestEnum::Center;
62+
let json = serde_json::to_string(&center).unwrap();
63+
assert_eq!(json, "\"center\"");
64+
let center = serde_json::from_str::<TestEnum>("\"center\"").unwrap();
65+
assert!(matches!(center, TestEnum::Center));
66+
67+
let user = TestEnum::Unknown(User {
68+
id: 1,
69+
name: "test".to_string(),
70+
});
71+
let json = serde_json::to_string(&user).unwrap();
72+
assert_eq!(
73+
json,
74+
"{\"type\":\"unknown\",\"value\":{\"id\":1,\"name\":\"test\"}}"
75+
);
76+
let user = serde_json::from_str::<TestEnum>(
77+
"{\"type\":\"unknown\",\"value\":{\"id\":1,\"name\":\"test\"}}",
78+
)
79+
.unwrap();
80+
match user {
81+
TestEnum::Unknown(user) => {
82+
assert_eq!(user.id, 1);
83+
assert_eq!(user.name, "test");
84+
}
85+
_ => panic!(),
86+
}
87+
}

0 commit comments

Comments
 (0)