use std::{ffi::c_void, ptr::NonNull};
use open62541_sys::UA_EMPTY_ARRAY_SENTINEL;
use crate::ua;
#[derive(Debug, Clone)]
pub enum VariantValue {
Empty,
Scalar(ScalarValue),
}
#[derive(Debug, Clone)]
pub enum ScalarValue {
Unknown,
Boolean(ua::Boolean), SByte(ua::SByte), Byte(ua::Byte), Int16(ua::Int16), UInt16(ua::UInt16), Int32(ua::Int32), UInt32(ua::UInt32), Int64(ua::Int64), UInt64(ua::UInt64), Float(ua::Float), Double(ua::Double), String(ua::String), DateTime(ua::DateTime), }
#[derive(Debug, Clone)]
pub enum ArrayValue<T> {
Invalid,
Empty,
Valid(NonNull<T>),
}
impl<T> ArrayValue<T> {
pub fn from_ptr(data: *mut T) -> Self {
if data.cast_const().cast::<c_void>() == unsafe { UA_EMPTY_ARRAY_SENTINEL } {
return ArrayValue::Empty;
}
match NonNull::new(data) {
Some(data) => ArrayValue::Valid(data),
None => ArrayValue::Invalid,
}
}
}