use std::future::Future;
use crate::error::DecodeError;
use ufotofu::local_nb::{BulkConsumer, BulkProducer};
pub trait Encodable {
fn encode<Consumer>(
&self,
consumer: &mut Consumer,
) -> impl Future<Output = Result<(), Consumer::Error>>
where
Consumer: BulkConsumer<Item = u8>;
}
pub trait Decodable {
fn decode<Producer>(
producer: &mut Producer,
) -> impl Future<Output = Result<Self, DecodeError<Producer::Error>>>
where
Producer: BulkProducer<Item = u8>,
Self: Sized;
}
pub trait RelativeEncodable<R> {
fn relative_encode<Consumer>(
&self,
reference: &R,
consumer: &mut Consumer,
) -> impl Future<Output = Result<(), Consumer::Error>>
where
Consumer: BulkConsumer<Item = u8>;
}
pub trait RelativeDecodable<R> {
fn relative_decode<Producer>(
reference: &R,
producer: &mut Producer,
) -> impl Future<Output = Result<Self, DecodeError<Producer::Error>>>
where
Producer: BulkProducer<Item = u8>,
Self: Sized;
}