Skip to main content

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;
7use vortex_session::VortexSession;
8
9use crate::messages::EncoderMessage;
10use crate::messages::MessageEncoder;
11
12pub struct AsyncMessageWriter<W> {
13    write: W,
14    encoder: MessageEncoder,
15}
16
17impl<W: AsyncWrite + Unpin> AsyncMessageWriter<W> {
18    pub fn new(write: W, session: &VortexSession) -> Self {
19        Self {
20            write,
21            encoder: MessageEncoder::new(session.clone()),
22        }
23    }
24
25    pub async fn write_message(&mut self, message: EncoderMessage<'_>) -> VortexResult<()> {
26        for buffer in self.encoder.encode(message)? {
27            self.write.write_all(&buffer).await?;
28        }
29        Ok(())
30    }
31
32    pub fn inner(&self) -> &W {
33        &self.write
34    }
35
36    pub fn into_inner(self) -> W {
37        self.write
38    }
39}