use thiserror::Error;
use crate::bindings;
#[derive(Debug)]
pub enum GenericValue {
Integer(i32),
Float(f32),
Pointer(*mut std::os::raw::c_void),
Func(bindings::VAGenericFunc),
}
#[derive(Debug, Error)]
pub enum GenericValueError {
#[error("unexpected VAGenericValueType {0}")]
UnexpectedType(u32),
}
impl TryFrom<bindings::VAGenericValue> for GenericValue {
type Error = GenericValueError;
fn try_from(value: bindings::VAGenericValue) -> Result<Self, Self::Error> {
match value.type_ {
bindings::VAGenericValueType::VAGenericValueTypeInteger => Ok(Self::Integer(unsafe { value.value.i })),
bindings::VAGenericValueType::VAGenericValueTypeFloat => Ok(Self::Float(unsafe { value.value.f })),
bindings::VAGenericValueType::VAGenericValueTypePointer => Ok(Self::Pointer(unsafe { value.value.p })),
bindings::VAGenericValueType::VAGenericValueTypeFunc => Ok(Self::Func(unsafe { value.value.fn_ })),
_ => Err(GenericValueError::UnexpectedType(value.type_)),
}
}
}