diff --git a/src/value/mod.rs b/src/value/mod.rs index 96e23b8..259d050 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -503,6 +503,20 @@ macro_rules! construct_types { } } + pub fn as_i16(&self) -> Result { + match self { + Value::S16(ref n) => Ok(*n), + value => Err(KbinErrorKind::ValueTypeMismatch(StandardType::S16, value.clone()).into()), + } + } + + pub fn as_u16(&self) -> Result { + match self { + Value::U16(ref n) => Ok(*n), + value => Err(KbinErrorKind::ValueTypeMismatch(StandardType::U16, value.clone()).into()), + } + } + pub fn as_i32(&self) -> Result { match self { Value::S32(ref n) => Ok(*n), @@ -517,6 +531,20 @@ macro_rules! construct_types { } } + pub fn as_i64(&self) -> Result { + match self { + Value::S64(ref n) => Ok(*n), + value => Err(KbinErrorKind::ValueTypeMismatch(StandardType::S64, value.clone()).into()), + } + } + + pub fn as_u64(&self) -> Result { + match self { + Value::U64(ref n) => Ok(*n), + value => Err(KbinErrorKind::ValueTypeMismatch(StandardType::U64, value.clone()).into()), + } + } + pub fn as_slice(&self) -> Result<&[u8], KbinError> { match self { Value::Binary(ref data) => Ok(data),