dust_devil_core/sandstorm/
event_stream.rs

1use std::io::Error;
2
3use tokio::io::{AsyncRead, AsyncWrite};
4
5use crate::{
6    logging::Event,
7    serialize::{ByteRead, ByteWrite},
8};
9
10use super::SandstormCommandType;
11
12/// A Sandstorm event stream message.
13pub struct EventStreamResponse(
14    /// The new event sent by the server.
15    pub Event,
16);
17
18/// A borrowed version of [`EventStreamResponse`].
19pub struct EventStreamResponseRef<'a>(
20    /// The new event sent by the server.
21    pub &'a Event,
22);
23
24impl EventStreamResponse {
25    pub fn as_ref(&self) -> EventStreamResponseRef {
26        EventStreamResponseRef(&self.0)
27    }
28}
29
30impl ByteRead for EventStreamResponse {
31    async fn read<R: AsyncRead + Unpin + ?Sized>(reader: &mut R) -> Result<Self, Error> {
32        Ok(Self(Event::read(reader).await?))
33    }
34}
35
36impl ByteWrite for EventStreamResponse {
37    async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
38        self.as_ref().write(writer).await
39    }
40}
41
42impl<'a> ByteWrite for EventStreamResponseRef<'a> {
43    async fn write<W: AsyncWrite + Unpin + ?Sized>(&self, writer: &mut W) -> Result<(), Error> {
44        (SandstormCommandType::EventStream, &self.0).write(writer).await
45    }
46}