• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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