zero_trust_rps/common/connection/
reader.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 {
    /// Probably not cancel-safe!
    fn get_next_message<T: DeserializeOwned + Send>(
        &mut self,
    ) -> impl Future<Output = Result<Option<T>, GetNextMessageError>> + Send;
}