1#![allow(unused_macro_rules)]
2
3use serde_test::Token;
4use std::iter;
5
6macro_rules! btreeset {
7    () => {
8        BTreeSet::new()
9    };
10    ($($value:expr),+) => {{
11        let mut set = BTreeSet::new();
12        $(set.insert($value);)+
13        set
14    }};
15}
16
17macro_rules! btreemap {
18    () => {
19        BTreeMap::new()
20    };
21    ($($key:expr => $value:expr),+) => {{
22        let mut map = BTreeMap::new();
23        $(map.insert($key, $value);)+
24        map
25    }};
26}
27
28macro_rules! hashset {
29    () => {
30        HashSet::new()
31    };
32    ($($value:expr),+) => {{
33        let mut set = HashSet::new();
34        $(set.insert($value);)+
35        set
36    }};
37    ($hasher:ident @ $($value:expr),+) => {{
38        use std::hash::BuildHasherDefault;
39        let mut set = HashSet::with_hasher(BuildHasherDefault::<$hasher>::default());
40        $(set.insert($value);)+
41        set
42    }};
43}
44
45macro_rules! hashmap {
46    () => {
47        HashMap::new()
48    };
49    ($($key:expr => $value:expr),+) => {{
50        let mut map = HashMap::new();
51        $(map.insert($key, $value);)+
52        map
53    }};
54    ($hasher:ident @ $($key:expr => $value:expr),+) => {{
55        use std::hash::BuildHasherDefault;
56        let mut map = HashMap::with_hasher(BuildHasherDefault::<$hasher>::default());
57        $(map.insert($key, $value);)+
58        map
59    }};
60}
61
62pub trait SingleTokenIntoIterator {
63    fn into_iter(self) -> iter::Once<Token>;
64}
65
66impl SingleTokenIntoIterator for Token {
67    fn into_iter(self) -> iter::Once<Token> {
68        iter::once(self)
69    }
70}
71
72macro_rules! seq {
73    ($($elem:expr),* $(,)?) => {{
74        use crate::macros::SingleTokenIntoIterator;
75        let mut vec = Vec::new();
76        $(<Vec<Token> as Extend<Token>>::extend(&mut vec, $elem.into_iter());)*
77        vec
78    }};
79}
80