pi_hole_api/
fake_hash_map.rs1use serde::{de::Deserializer, Deserialize};
2use std::collections::HashMap;
3
4#[derive(Deserialize, Debug)]
5#[serde(untagged)]
6pub enum FakeHashMap<K, V>
11where
12 K: std::cmp::Eq + std::hash::Hash,
13{
14 HashMap(HashMap<K, V>),
15 EmptyList(Vec<V>),
16}
17
18impl<'a, K, V> FakeHashMap<K, V>
19where
20 K: std::cmp::Eq + std::hash::Hash,
21{
22 pub fn into_hash_map(self) -> HashMap<K, V> {
23 self.into()
24 }
25}
26
27impl<K, V> From<FakeHashMap<K, V>> for HashMap<K, V>
28where
29 K: std::cmp::Eq + std::hash::Hash,
30{
31 fn from(item: FakeHashMap<K, V>) -> Self {
32 match item {
33 FakeHashMap::HashMap(h) => h,
34 FakeHashMap::EmptyList(_) => HashMap::new(),
35 }
36 }
37}
38
39pub fn deserialize_fake_hash_map<
40 'de,
41 D: Deserializer<'de>,
42 K: std::cmp::Eq + std::hash::Hash + Deserialize<'de>,
43 V: Deserialize<'de>,
44>(
45 deserializer: D,
46) -> Result<HashMap<K, V>, D::Error> {
47 let result = FakeHashMap::deserialize(deserializer)?;
48 Ok(result.into())
49}