zero_trust_rps/common/connection/
reader.rs

1use std::future::Future;
2
3use serde::de::DeserializeOwned;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum GetNextMessageError {
8    #[error("Message too large: reached maximum buffer size")]
9    MessageTooLarge,
10    #[error("read error: {}", .0)]
11    ReadErr(#[from] quinn::ReadError),
12    #[error("invalid data: {}", .0)]
13    DeserializeErr(#[from] postcard::Error),
14}
15
16pub trait Reader: Send {
17    /// Probably not cancel-safe!
18    fn get_next_message<T: DeserializeOwned + Send>(
19        &mut self,
20    ) -> impl Future<Output = Result<Option<T>, GetNextMessageError>> + Send;
21}