From 2107b3f0b58a111f42ce1a2d6c7d318155912f05 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Thu, 2 Feb 2017 23:16:53 -0800 Subject: Add slice support and auto conversion of hash/slice sets --- src/value.rs | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src/value.rs') diff --git a/src/value.rs b/src/value.rs index 5228d91..528e1a9 100644 --- a/src/value.rs +++ b/src/value.rs @@ -80,6 +80,13 @@ impl Value { _ => None } } + /// Gets the underlying type as a slice; only works if the type is actually a slice. + pub fn as_slice(&self) -> Option<&[Value]> { + match *self { + Value::Array(ref value) => Some(value), + _ => None + } + } } // Generalized construction from type into variant is needed @@ -115,8 +122,32 @@ impl From for Value { } } -impl From> for Value { - fn from(value: HashMap) -> Value { - Value::Table(value) +// impl From> for Value { +// fn from(value: HashMap) -> Value { +// Value::Table(value) +// } +// } + +impl From> for Value where T: Into { + fn from(values: HashMap) -> Value { + let mut r = HashMap::new(); + + for (k, v) in values { + r.insert(k.clone(), v.into()); + } + + Value::Table(r) + } +} + +impl From> for Value where T: Into { + fn from(values: Vec) -> Value { + let mut l = Vec::new(); + + for v in values { + l.push(v.into()); + } + + Value::Array(l) } } -- cgit v1.2.3