conjoiner_engine/
lib.rs

1//! A utility crate built for the libqaul ecosystem
2//!
3//! Note: unfortunately `serde` is very re-export unfriendly, so you
4//! will want to include `serde = { version = "1.0", features =
5//! ["derive"] }` to your crate manually!
6
7pub use postcard::{
8    flavors::{Cobs, StdVec},
9    Error, Result,
10};
11
12use serde::{de::DeserializeOwned, Serialize};
13use std::fmt::Debug;
14
15/// Serialise any iteratable into a compacted binary payload
16pub fn serialise<S>(data: &S) -> Result<Vec<u8>>
17where
18    S: Serialize + Debug,
19{
20    postcard::to_stdvec(data)
21}
22
23/// Deserialise a byte array payload into a concrete type
24pub fn deserialise<D>(data: &Vec<u8>) -> Result<D>
25where
26    D: DeserializeOwned,
27{
28    postcard::from_bytes(&data)
29}
30
31#[cfg(test)]
32mod tests {
33
34    #[test]
35    fn serialise() {
36        use serde::Serialize;
37
38        #[derive(Debug, Serialize)]
39        struct Foo(usize);
40
41        let foo = Foo(1312);
42        let v = crate::serialise(&foo).unwrap();
43        assert_eq!(v.len(), 10);
44    }
45
46    #[test]
47    fn deserialise() {
48        use serde::Deserialize;
49
50        #[derive(Deserialize)]
51        struct Foo(usize);
52
53        let v = vec![32, 5, 0, 0, 0, 0, 0, 0];
54        let f: Foo = crate::deserialise(&v).unwrap();
55
56        assert_eq!(f.0, 1312);
57    }
58}