zero-trust-rps 0.0.5

Online Multiplayer Rock Paper Scissors
Documentation
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;
}