1 //! Tests for `#[serde(field_identifier)]` and `#[serde(variant_identifier)]`
2 use serde::Deserialize;
3 use serde_test::{assert_de_tokens, Token};
4
5 #[test]
test_variant_identifier()6 fn test_variant_identifier() {
7 #[derive(Deserialize, Debug, PartialEq)]
8 #[serde(variant_identifier)]
9 enum V {
10 Aaa,
11 Bbb,
12 }
13
14 assert_de_tokens(&V::Aaa, &[Token::U8(0)]);
15 assert_de_tokens(&V::Aaa, &[Token::U16(0)]);
16 assert_de_tokens(&V::Aaa, &[Token::U32(0)]);
17 assert_de_tokens(&V::Aaa, &[Token::U64(0)]);
18 assert_de_tokens(&V::Aaa, &[Token::Str("Aaa")]);
19 assert_de_tokens(&V::Aaa, &[Token::Bytes(b"Aaa")]);
20 }
21
22 #[test]
test_field_identifier()23 fn test_field_identifier() {
24 #[derive(Deserialize, Debug, PartialEq)]
25 #[serde(field_identifier, rename_all = "snake_case")]
26 enum F {
27 Aaa,
28 Bbb,
29 }
30
31 assert_de_tokens(&F::Aaa, &[Token::U8(0)]);
32 assert_de_tokens(&F::Aaa, &[Token::U16(0)]);
33 assert_de_tokens(&F::Aaa, &[Token::U32(0)]);
34 assert_de_tokens(&F::Aaa, &[Token::U64(0)]);
35 assert_de_tokens(&F::Aaa, &[Token::Str("aaa")]);
36 assert_de_tokens(&F::Aaa, &[Token::Bytes(b"aaa")]);
37 }
38
39 #[test]
test_unit_fallthrough()40 fn test_unit_fallthrough() {
41 #[derive(Deserialize, Debug, PartialEq)]
42 #[serde(field_identifier, rename_all = "snake_case")]
43 enum F {
44 Aaa,
45 Bbb,
46 #[serde(other)]
47 Other,
48 }
49
50 assert_de_tokens(&F::Other, &[Token::U8(42)]);
51 assert_de_tokens(&F::Other, &[Token::U16(42)]);
52 assert_de_tokens(&F::Other, &[Token::U32(42)]);
53 assert_de_tokens(&F::Other, &[Token::U64(42)]);
54 assert_de_tokens(&F::Other, &[Token::Str("x")]);
55 }
56
57 #[test]
test_newtype_fallthrough()58 fn test_newtype_fallthrough() {
59 #[derive(Deserialize, Debug, PartialEq)]
60 #[serde(field_identifier, rename_all = "snake_case")]
61 enum F {
62 Aaa,
63 Bbb,
64 Other(String),
65 }
66
67 assert_de_tokens(&F::Other("x".to_owned()), &[Token::Str("x")]);
68 }
69
70 #[test]
test_newtype_fallthrough_generic()71 fn test_newtype_fallthrough_generic() {
72 #[derive(Deserialize, Debug, PartialEq)]
73 #[serde(field_identifier, rename_all = "snake_case")]
74 enum F<T> {
75 Aaa,
76 Bbb,
77 Other(T),
78 }
79
80 assert_de_tokens(&F::Other(42u8), &[Token::U8(42)]);
81 assert_de_tokens(&F::Other(42u16), &[Token::U16(42)]);
82 assert_de_tokens(&F::Other(42u32), &[Token::U32(42)]);
83 assert_de_tokens(&F::Other(42u64), &[Token::U64(42)]);
84 assert_de_tokens(&F::Other("x".to_owned()), &[Token::Str("x")]);
85 }
86