vortex_ipc/messages/
writer_async.rs

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