vbs/
binary_serializer.rs

1use crate::version::Version;
2use anyhow::Result;
3use serde::{Deserialize, Serialize};
4
5pub trait BinarySerializer {
6    const MAJOR: u16;
7    const MINOR: u16;
8
9    fn version() -> Version {
10        Version {
11            major: Self::MAJOR,
12            minor: Self::MINOR,
13        }
14    }
15
16    // TODO: `Versioned` trait
17
18    fn serialize_no_version<T: ?Sized + Serialize>(value: &T) -> Result<Vec<u8>>;
19
20    fn deserialize_no_version<'a, T>(bytes: &'a [u8]) -> Result<T>
21    where
22        T: Deserialize<'a>;
23
24    fn serialize<T: ?Sized + Serialize>(value: &T) -> Result<Vec<u8>>;
25
26    fn deserialize<'a, T>(bytes: &'a [u8]) -> Result<T>
27    where
28        T: Deserialize<'a>;
29}