| use crate::mapping::Mapping; |
| use crate::value::{Number, Value}; |
| use std::fmt::{self, Debug, Display}; |
| |
| impl Debug for Value { |
| fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { |
| match self { |
| Value::Null => formatter.write_str("Null"), |
| Value::Bool(boolean) => write!(formatter, "Bool({})", boolean), |
| Value::Number(number) => write!(formatter, "Number({})", number), |
| Value::String(string) => write!(formatter, "String({:?})", string), |
| Value::Sequence(sequence) => { |
| formatter.write_str("Sequence ")?; |
| formatter.debug_list().entries(sequence).finish() |
| } |
| Value::Mapping(mapping) => Debug::fmt(mapping, formatter), |
| Value::Tagged(tagged) => Debug::fmt(tagged, formatter), |
| } |
| } |
| } |
| |
| struct DisplayNumber<'a>(&'a Number); |
| |
| impl<'a> Debug for DisplayNumber<'a> { |
| fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { |
| Display::fmt(self.0, formatter) |
| } |
| } |
| |
| impl Debug for Number { |
| fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { |
| write!(formatter, "Number({})", self) |
| } |
| } |
| |
| impl Debug for Mapping { |
| fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { |
| formatter.write_str("Mapping ")?; |
| let mut debug = formatter.debug_map(); |
| for (k, v) in self { |
| let tmp; |
| debug.entry( |
| match k { |
| Value::Bool(boolean) => boolean, |
| Value::Number(number) => { |
| tmp = DisplayNumber(number); |
| &tmp |
| } |
| Value::String(string) => string, |
| _ => k, |
| }, |
| v, |
| ); |
| } |
| debug.finish() |
| } |
| } |