use core::task::{Context, Poll};
use futures::AsyncWrite;
use crate::backend::{Format, FormatEncode};
pub trait Encode: Sized {
type Format: FormatEncode;
type Data;
fn init(data: &Self::Data) -> Self;
fn start_encode<W>(format: &Self::Format, writer: &mut W, data: &Self::Data, cx: &mut Context<'_>) -> Result<Option<Self>, <<Self as Encode>::Format as Format>::Error>
where
W: AsyncWrite + Unpin,
;
fn poll_encode<W>(&mut self, format: &Self::Format, writer: &mut W, data: &Self::Data, cx: &mut Context<'_>) -> Poll<Result<(), <<Self as Encode>::Format as Format>::Error>>
where
W: AsyncWrite + Unpin,
;
}