mercust-msgpack 0.0.1

Rust implementation for mercury-msgpack.
Documentation
use mercust::data_elements::DataElement;


/// Serialize a `mercust` data element into `mercury-msgpack` bytes.
/// 
/// Example:
/// 
/// ```
/// use mercust::data_elements::DataElement;
/// use mercust_msgpack::{serialize_data_element, deserialize_data_element};
/// use maplit::hashmap;
///
/// let filter_element = DataElement::NamedValueCollection(hashmap! {
///         "value".to_string() => DataElement::Tensor{
///         shape: vec![2, 3],
///         data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
///     }
/// });
/// let serialized = serialize_data_element(&filter_element).unwrap();
/// let deserialized = deserialize_data_element(&serialized).unwrap();
/// assert_eq!(filter_element, deserialized);
/// ```
pub fn serialize_data_element(data_element: &DataElement) -> Result<Vec<u8>, ()> {
    rmp_serde::encode::to_vec(data_element).map_err(|_| ())
}

/// Deserialize a `mercust` data element from `mercury-msgpack` bytes.
/// 
/// Example:
/// 
/// ```
/// use mercust::data_elements::DataElement;
/// use mercust_msgpack::{serialize_data_element, deserialize_data_element};
/// use maplit::hashmap;
/// 
/// let filter_element = DataElement::NamedValueCollection(hashmap! {
///         "value".to_string() => DataElement::Tensor{
///         shape: vec![2, 3],
///         data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
///     }
/// });
/// let serialized = serialize_data_element(&filter_element).unwrap();
/// let deserialized = deserialize_data_element(&serialized).unwrap();
/// assert_eq!(filter_element, deserialized);
/// ```
pub fn deserialize_data_element(data: &[u8]) -> Result<DataElement, ()> {
    rmp_serde::decode::from_slice(data).map_err(|_| ())
}

#[cfg(test)]
mod tests {
    use super::*;

    use maplit::hashmap;

    #[test]
    fn test_serde_cycle() {
        let filter_element = DataElement::NamedValueCollection(hashmap! {
                "value".to_string() => DataElement::Tensor{
                shape: vec![2, 3],
                data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
            }
        });

        let serialized = serialize_data_element(&filter_element).unwrap();
        let deserialized = deserialize_data_element(&serialized).unwrap();

        assert_eq!(filter_element, deserialized);
    }
}