use std::future::Future;
use serde::de::DeserializeOwned;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum GetNextMessageError {
#[error("Message too large: reached maximum buffer size")]
MessageTooLarge,
#[error("read error: {}", .0)]
ReadErr(#[from] quinn::ReadError),
#[error("invalid data: {}", .0)]
DeserializeErr(#[from] postcard::Error),
}
pub trait Reader: Send {
fn get_next_message<T: DeserializeOwned + Send>(
&mut self,
) -> impl Future<Output = Result<Option<T>, GetNextMessageError>> + Send;
}