From cde3f8a90ae8cd05aa4dd3b2a7c4995add985993 Mon Sep 17 00:00:00 2001 From: Matt Bilker Date: Thu, 13 Dec 2018 01:26:41 +0000 Subject: [PATCH] value: add TryFrom impl for borrowed Binary values --- src/value/mod.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/value/mod.rs b/src/value/mod.rs index 9076eec..2bb7653 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -599,6 +599,13 @@ impl Value { } } + pub fn as_binary(&self) -> Result<&[u8], KbinError> { + match self { + Value::Binary(ref data) => Ok(data), + value => Err(KbinErrorKind::ValueTypeMismatch(StandardType::Binary, value.clone()).into()), + } + } + pub fn as_array(&self) -> Result<&[Value], KbinError> { match self { Value::Array(_, ref values) => Ok(values), @@ -623,6 +630,15 @@ impl TryFrom for Vec { } } +#[cfg(feature = "try_from")] +impl TryFrom<&Value> for Vec { + type Error = KbinError; + + fn try_from(value: &Value) -> Result { + value.as_binary().map(Vec::from) + } +} + impl From> for Value { fn from(value: Vec) -> Value { Value::Binary(value)