mercust-msgpack 0.0.1

Rust implementation for mercury-msgpack.
Documentation
use mercust::manifest_elements::ManifestElement;


/// Serialize a `mercust` manifest element into `mercury-msgpack` bytes.
/// 
/// Example:
/// 
/// ```
/// use mercust::manifest_elements::ManifestElement;
/// use mercust_msgpack::{serialize_manifest_element, deserialize_manifest_element};
/// use maplit::hashmap;
/// 
/// let filter_element = ManifestElement::Dict(hashmap! {
///         "value".to_string() => ManifestElement::TypeDeclaration(Box::new(
///             ManifestElement::TypeTensor (vec![ManifestElement::Dim(5)])
///     ))
/// });
/// 
/// let serialized = serialize_manifest_element(&filter_element).unwrap();
/// let deserialized = deserialize_manifest_element(&serialized).unwrap();

/// assert_eq!(filter_element, deserialized);
/// ```
pub fn serialize_manifest_element(manifest_element: &ManifestElement) -> Result<Vec<u8>, ()> {
    rmp_serde::encode::to_vec(manifest_element).map_err(|_| ())
}

/// Deserialize a `mercust` manifest element into `mercury-msgpack` bytes.
/// 
/// Example:
/// 
/// ```
/// use mercust::manifest_elements::ManifestElement;
/// use mercust_msgpack::{serialize_manifest_element, deserialize_manifest_element};
/// use maplit::hashmap;
/// 
/// let filter_element = ManifestElement::Dict(hashmap! {
///         "value".to_string() => ManifestElement::TypeDeclaration(Box::new(
///             ManifestElement::TypeTensor (vec![ManifestElement::Dim(5)])
///     ))
/// });
/// 
/// let serialized = serialize_manifest_element(&filter_element).unwrap();
/// let deserialized = deserialize_manifest_element(&serialized).unwrap();

/// assert_eq!(filter_element, deserialized);
/// ```
pub fn deserialize_manifest_element(data: &[u8]) -> Result<ManifestElement, ()> {
    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 = ManifestElement::Dict(hashmap! {
                "value".to_string() => ManifestElement::TypeDeclaration(Box::new(
                    ManifestElement::TypeTensor (vec![ManifestElement::Dim(5)])
            ))
        });

        let serialized = serialize_manifest_element(&filter_element).unwrap();
        let deserialized = deserialize_manifest_element(&serialized).unwrap();

        assert_eq!(filter_element, deserialized);
    }
}