From ec08a408a3732c56c87b2be523e318ebad93977e Mon Sep 17 00:00:00 2001 From: Matt Bilker Date: Fri, 17 Aug 2018 20:15:54 -0400 Subject: [PATCH] value: add a method to get the StandardType of a Value --- src/value/de.rs | 2 +- src/value/mod.rs | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/value/de.rs b/src/value/de.rs index 0a025eb..7be7358 100644 --- a/src/value/de.rs +++ b/src/value/de.rs @@ -86,7 +86,7 @@ impl<'de> Deserialize<'de> for Value { { trace!("ValueVisitor::visit_map()"); - let mut values: IndexMap = IndexMap::new(); + let mut values: IndexMap = IndexMap::new(); while let Some((key, value)) = try!(map.next_entry()) { // Check to see if this is an attribute diff --git a/src/value/mod.rs b/src/value/mod.rs index 2638cff..d293ec2 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -35,6 +35,20 @@ macro_rules! construct_types { } )+ + impl Value { + pub fn standard_type(&self) -> Option { + match *self { + $( + Value::$konst(_) => Some(StandardType::$konst), + )+ + Value::Time(_) => Some(StandardType::Time), + Value::Attribute(_) => Some(StandardType::Attribute), + Value::Array(_) => None, + Value::Map(_) => Some(StandardType::NodeStart), + } + } + } + impl<'de> DeserializeSeed<'de> for StandardType { type Value = Value; @@ -44,12 +58,12 @@ macro_rules! construct_types { trace!("::deserialize(self: {:?})", self); match self { $( - StandardType::$konst => <$($value_type)*>::deserialize(deserializer).map(Value::from), + StandardType::$konst => <$($value_type)*>::deserialize(deserializer).map(Value::$konst), )+ StandardType::Time => u32::deserialize(deserializer).map(Value::Time), StandardType::Attribute => String::deserialize(deserializer).map(Value::Attribute), StandardType::NodeStart => Value::deserialize(deserializer), - StandardType::NodeEnd => unimplemented!(), + StandardType::NodeEnd | StandardType::FileEnd => unimplemented!(), } } @@ -57,6 +71,7 @@ macro_rules! construct_types { } } + impl fmt::Debug for Value { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { macro_rules! field {