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
}
}