proof_of_sql/base/
standard_binary_serde.rs1use alloc::vec::Vec;
2use bincode::{
3 config::Config,
4 error::{DecodeError, EncodeError},
5};
6use serde::{Deserialize, Serialize};
7
8fn standard_binary_config() -> impl Config {
9 bincode::config::legacy()
10 .with_fixed_int_encoding()
11 .with_big_endian()
12}
13
14pub fn try_standard_binary_serialization(
16 value_to_be_serialized: impl Serialize,
17) -> Result<Vec<u8>, EncodeError> {
18 bincode::serde::encode_to_vec(value_to_be_serialized, standard_binary_config())
19}
20
21pub fn try_standard_binary_deserialization<D: for<'a> Deserialize<'a>>(
23 value_to_be_deserialized: &[u8],
24) -> Result<(D, usize), DecodeError> {
25 bincode::serde::decode_from_slice(value_to_be_deserialized, standard_binary_config())
26}
27
28#[cfg(test)]
29mod tests {
30 use super::{try_standard_binary_deserialization, try_standard_binary_serialization};
31 use serde::{Deserialize, Serialize};
32
33 #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)]
34 struct SerdeTestType {
35 a: String,
36 b: bool,
37 c: i32,
38 }
39
40 #[test]
41 fn round_trip() {
42 let obj = SerdeTestType {
43 a: "test".to_string(),
44 b: false,
45 c: 123,
46 };
47 let serialized = try_standard_binary_serialization(obj.clone()).unwrap();
48 let (deserialized, _): (SerdeTestType, _) =
49 try_standard_binary_deserialization(&serialized).unwrap();
50 assert_eq!(obj, deserialized);
51 let reserialized = try_standard_binary_serialization(deserialized).unwrap();
52 assert_eq!(serialized, reserialized);
53 }
54}