mercust_msgpack/
data_elements.rs

1use mercust::data_elements::DataElement;
2
3
4/// Serialize a `mercust` data element into `mercury-msgpack` bytes.
5/// 
6/// Example:
7/// 
8/// ```
9/// use mercust::data_elements::DataElement;
10/// use mercust_msgpack::{serialize_data_element, deserialize_data_element};
11/// use maplit::hashmap;
12///
13/// let filter_element = DataElement::NamedValueCollection(hashmap! {
14///         "value".to_string() => DataElement::Tensor{
15///         shape: vec![2, 3],
16///         data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
17///     }
18/// });
19/// let serialized = serialize_data_element(&filter_element).unwrap();
20/// let deserialized = deserialize_data_element(&serialized).unwrap();
21/// assert_eq!(filter_element, deserialized);
22/// ```
23pub fn serialize_data_element(data_element: &DataElement) -> Result<Vec<u8>, ()> {
24    rmp_serde::encode::to_vec(data_element).map_err(|_| ())
25}
26
27/// Deserialize a `mercust` data element from `mercury-msgpack` bytes.
28/// 
29/// Example:
30/// 
31/// ```
32/// use mercust::data_elements::DataElement;
33/// use mercust_msgpack::{serialize_data_element, deserialize_data_element};
34/// use maplit::hashmap;
35/// 
36/// let filter_element = DataElement::NamedValueCollection(hashmap! {
37///         "value".to_string() => DataElement::Tensor{
38///         shape: vec![2, 3],
39///         data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
40///     }
41/// });
42/// let serialized = serialize_data_element(&filter_element).unwrap();
43/// let deserialized = deserialize_data_element(&serialized).unwrap();
44/// assert_eq!(filter_element, deserialized);
45/// ```
46pub fn deserialize_data_element(data: &[u8]) -> Result<DataElement, ()> {
47    rmp_serde::decode::from_slice(data).map_err(|_| ())
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    use maplit::hashmap;
55
56    #[test]
57    fn test_serde_cycle() {
58        let filter_element = DataElement::NamedValueCollection(hashmap! {
59                "value".to_string() => DataElement::Tensor{
60                shape: vec![2, 3],
61                data: vec![0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
62            }
63        });
64
65        let serialized = serialize_data_element(&filter_element).unwrap();
66        let deserialized = deserialize_data_element(&serialized).unwrap();
67
68        assert_eq!(filter_element, deserialized);
69    }
70}