use crate::{Decoder, Encoder, SyncSession};
pub trait DeltaPack: Sized {
#[must_use]
fn equals(&self, other: &Self) -> bool;
fn encode_into(&self, encoder: &mut Encoder);
fn decode_from(decoder: &mut Decoder) -> Self;
fn encode_diff_into(a: &Self, b: &Self, encoder: &mut Encoder);
fn decode_diff_from(obj: &Self, decoder: &mut Decoder) -> Self;
#[must_use]
fn encode(&self) -> Vec<u8> {
Encoder::encode(|encoder| {
self.encode_into(encoder);
encoder.finish()
})
}
#[must_use]
fn decode(buf: &[u8]) -> Self {
Decoder::decode(buf, |decoder| Self::decode_from(decoder))
}
#[must_use]
fn encode_diff(a: &Self, b: &Self) -> Vec<u8> {
Encoder::encode(|encoder| {
Self::encode_diff_into(a, b, encoder);
encoder.finish()
})
}
#[must_use]
fn decode_diff(obj: &Self, diff: &[u8]) -> Self {
Decoder::decode(diff, |decoder| Self::decode_diff_from(obj, decoder))
}
#[must_use]
fn create_sync_session() -> SyncSession<Self>
where
Self: Clone,
{
SyncSession::new()
}
}