1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use serde::{__private::de::Content, de::MapAccess, Deserialize};

pub fn read_map_next_key_lowercase<'de, M>(dict: &mut M) -> Result<Option<String>, M::Error>
where
    M: MapAccess<'de>,
{
    let key = dict.next_key::<&str>()?;
    Ok(key.map(|s| s.trim().to_ascii_lowercase()))
}

#[allow(unused_variables)]
pub fn read_map_next_value<'de, M, F, T>(dict: &mut M, mut handler: F)
where
    M: MapAccess<'de>,
    F: FnMut(T),
    T: Deserialize<'de>,
{
    match dict.next_value::<T>() {
        Ok(o) => handler(o),
        #[cfg(debug_assertions)]
        Err(e) => eprintln!("MapAccess::next_value: {}", e),
        #[cfg(not(debug_assertions))]
        _ => {}
    }
}

#[allow(unused_variables)]
pub fn read_map_next_extra<'de, M>(dict: &mut M, this: &str, key: &str)
where
    M: MapAccess<'de>,
{
    match dict.next_value::<Content>() {
        #[cfg(debug_assertions)]
        Ok(o) => eprintln!("{}.{} = {:?}", this, key, o),
        #[cfg(debug_assertions)]
        Err(_) => eprintln!("{}.{}", this, key),
        #[cfg(not(debug_assertions))]
        _ => {}
    }
}