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