use cxx::UniquePtr;
use std::fmt;
use crate::{bridge, Result};
pub struct Value {
pub(crate) inner: UniquePtr<bridge::ValueWrapper>,
}
impl Value {
pub fn is_valid(&self) -> bool {
bridge::value_is_valid(&self.inner)
}
pub fn get_field_double(&self, field_name: &str) -> Result<f64> {
Ok(bridge::value_get_field_double(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_int32(&self, field_name: &str) -> Result<i32> {
Ok(bridge::value_get_field_int32(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_string(&self, field_name: &str) -> Result<String> {
Ok(bridge::value_get_field_string(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_enum(&self, field_name: &str) -> Result<i16> {
Ok(bridge::value_get_field_enum(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_double_array(&self, field_name: &str) -> Result<Vec<f64>> {
Ok(bridge::value_get_field_double_array(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_int32_array(&self, field_name: &str) -> Result<Vec<i32>> {
Ok(bridge::value_get_field_int32_array(
&self.inner,
field_name.to_string(),
)?)
}
pub fn get_field_string_array(&self, field_name: &str) -> Result<Vec<String>> {
Ok(bridge::value_get_field_string_array(
&self.inner,
field_name.to_string(),
)?)
}
}
impl fmt::Display for Value {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", bridge::value_to_string(&self.inner))
}
}
impl fmt::Debug for Value {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Value")
.field("data", &bridge::value_to_string(&self.inner))
.finish()
}
}