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}