objets_metier_rs 1.0.3

Bibliothèque Rust moderne et sûre pour l'API COM Objets Métier Sage 100c - Production Ready
use crate::com::{FromDispatchNew, SafeVariant, TypedComCollection};
use crate::errors::{SageError, SageResult};

/// Convertit un `SafeVariant` COM en wrapper métier typé.
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(),
        })
    }
}

/// Convertit un `SafeVariant` COM représentant une collection en `Vec<T>`.
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()
}