zero-trust-rps 0.1.1

Online Multiplayer Rock Paper Scissors
Documentation
use std::sync::Arc;

use quinn::SendStream;
use serde::Serialize;
use tokio::sync::Mutex;

use crate::common::connection::{WriteMessageError, Writer};

impl Writer for SendStream {
    async fn write_message<T: Serialize + Send>(
        &mut self,
        value: T,
    ) -> Result<(), WriteMessageError> {
        let data = postcard::to_stdvec(&value)?;
        log::debug!("wrote {} bytes", data.len());
        self.write_all(&data).await?;
        Ok(())
    }
}

impl Writer for Arc<Mutex<SendStream>> {
    async fn write_message<T: Serialize + Send>(
        &mut self,
        value: T,
    ) -> Result<(), WriteMessageError> {
        let mut lock = self.lock().await;
        SendStream::write_message(&mut *lock, value).await
    }
}