Skip to main content

serde_yaml/value/
debug.rs

1use std::fmt::{self, Debug, Display};
2
3use crate::{
4    mapping::Mapping,
5    value::{Number, Value},
6};
7
8impl Debug for Value {
9    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
10        match self {
11            Value::Null => formatter.write_str("Null"),
12            Value::Bool(boolean) => write!(formatter, "Bool({})", boolean),
13            Value::Number(number) => write!(formatter, "Number({})", number),
14            Value::String(string) => write!(formatter, "String({:?})", string),
15            Value::Sequence(sequence) => {
16                formatter.write_str("Sequence ")?;
17                formatter.debug_list().entries(sequence).finish()
18            }
19            Value::Mapping(mapping) => Debug::fmt(mapping, formatter),
20            Value::Tagged(tagged) => Debug::fmt(tagged, formatter),
21        }
22    }
23}
24
25struct DisplayNumber<'a>(&'a Number);
26
27impl<'a> Debug for DisplayNumber<'a> {
28    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
29        Display::fmt(self.0, formatter)
30    }
31}
32
33impl Debug for Number {
34    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
35        write!(formatter, "Number({})", self)
36    }
37}
38
39impl Debug for Mapping {
40    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
41        formatter.write_str("Mapping ")?;
42        let mut debug = formatter.debug_map();
43        for (k, v) in self {
44            let tmp;
45            debug.entry(
46                match k {
47                    Value::Bool(boolean) => boolean,
48                    Value::Number(number) => {
49                        tmp = DisplayNumber(number);
50                        &tmp
51                    }
52                    Value::String(string) => string,
53                    _ => k,
54                },
55                v,
56            );
57        }
58        debug.finish()
59    }
60}