use crate::message::proto_message::ProtoMessage; use crate::writer::errors::ProtoWriteError; use crate::writer::protowriter::ProtoWriter; use async_trait::async_trait; use tokio::io::{AsyncWrite, AsyncWriteExt}; #[async_trait] pub trait OneWayProtoWriter where T: ProtoMessage, { async fn write_proto(&mut self, message: T) -> Result<(), ProtoWriteError>; } #[async_trait] impl OneWayProtoWriter for ProtoWriter where W: AsyncWrite + Unpin + Send, T: ProtoMessage + Send + 'static, { async fn write_proto(&mut self, message: T) -> Result<(), ProtoWriteError> { let variant = message.variant(); let data = message.serialize()?; let length = data.len() as i32 + 4; self.inner.write_u8(variant).await?; self.inner.write_i32(length).await?; self.inner.write_all(&data).await?; Ok(()) } }