hts/
typed_value.rs

1use std::ffi::CStr;
2use std::convert::TryInto;
3
4#[derive(Debug)]
5pub enum TypedValue<'a> {
6    I8(&'a [i8]),
7    U8(&'a [u8]),
8    I16(&'a [i16]),
9    U16(&'a [u16]),
10    I32(&'a [i32]),
11    U32(&'a [u32]),
12    F(&'a [f32]),
13    Str(&'a CStr),
14    SStr(&'a [u8]),
15    Null,
16}
17
18impl <'a> TypedValue<'a> {
19    fn cast_int<T: TryInto<i64> + Copy>(slice: &[T], idx: usize) -> Option<i64> {
20        let value = *slice.get(idx)?;
21        value.try_into().ok()
22    }
23    pub fn get_int(&self, idx: usize) -> Option<i64> {
24        use TypedValue::*;
25        match self {
26            I8(v) => Self::cast_int(v, idx),
27            U8(v) =>  Self::cast_int(v, idx),
28            I16(v) => Self::cast_int(v, idx),
29            U16(v) => Self::cast_int(v, idx),
30            I32(v) => Self::cast_int(v, idx),
31            U32(v) => Self::cast_int(v, idx),
32            _ => None
33        }
34    }
35}