use crate::com::{FromDispatchNew, SafeVariant, TypedComCollection};
use crate::errors::{SageError, SageResult};
pub(crate) fn variant_to_object<T>(
variant: SafeVariant,
target_type: &'static str,
error_value: impl Into<String>,
) -> SageResult<T>
where
T: FromDispatchNew,
{
if variant.is_object() {
T::from_dispatch_new(variant.to_dispatch()?)
} else {
Err(SageError::ConversionError {
from_type: "VARIANT".to_string(),
to_type: target_type.to_string(),
value: error_value.into(),
})
}
}
pub(crate) fn variant_to_vec<T>(variant: SafeVariant) -> SageResult<Vec<T>>
where
T: FromDispatchNew,
{
if !variant.is_object() {
return Ok(Vec::new());
}
TypedComCollection::<T>::from_variant(variant)?.to_vec()
}