vortex_ipc/messages/
writer_async.rs

1use futures_util::{AsyncWrite, AsyncWriteExt};
2use vortex_error::VortexResult;
3
4use crate::messages::{EncoderMessage, MessageEncoder};
5
6pub struct AsyncMessageWriter<W> {
7    write: W,
8    encoder: MessageEncoder,
9}
10
11impl<W: AsyncWrite + Unpin> AsyncMessageWriter<W> {
12    pub fn new(write: W) -> Self {
13        Self {
14            write,
15            encoder: MessageEncoder::default(),
16        }
17    }
18
19    pub async fn write_message(&mut self, message: EncoderMessage<'_>) -> VortexResult<()> {
20        for buffer in self.encoder.encode(message) {
21            self.write.write_all(&buffer).await?;
22        }
23        Ok(())
24    }
25
26    pub fn inner(&self) -> &W {
27        &self.write
28    }
29
30    pub fn into_inner(self) -> W {
31        self.write
32    }
33}