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