Struct transmog_async::TransmogStream
source · pub struct TransmogStream<TReads, TWrites, TStream, TDestination, TFormat> { /* private fields */ }
Expand description
A wrapper around an asynchronous stream that receives and sends bincode-encoded values.
To use, provide a stream that implements both AsyncWrite
and [AsyncRead
], and then use
[Sink
] to send values and [Stream
] to receive them.
Note that an TransmogStream
must be of the type AsyncDestination
in order to be
compatible with an TransmogReader
on the remote end (recall that it requires the
serialized size prefixed to the serialized data). The default is SyncDestination
, but these
can be easily toggled between using TransmogStream::for_async
.
Implementations§
source§impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
sourcepub fn get_ref(&self) -> &TStream
pub fn get_ref(&self) -> &TStream
Gets a reference to the underlying stream.
It is inadvisable to directly read from or write to the underlying stream.
sourcepub fn get_mut(&mut self) -> &mut TStream
pub fn get_mut(&mut self) -> &mut TStream
Gets a mutable reference to the underlying stream.
It is inadvisable to directly read from or write to the underlying stream.
sourcepub fn into_inner(self) -> (TStream, TFormat)
pub fn into_inner(self) -> (TStream, TFormat)
Unwraps this TransmogStream
, returning the underlying stream.
Note that any leftover serialized data that has not yet been sent, or received data that has not yet been deserialized, is lost.
source§impl<TStream, TFormat> TransmogStream<(), (), TStream, SyncDestination, TFormat>
impl<TStream, TFormat> TransmogStream<(), (), TStream, SyncDestination, TFormat>
source§impl<TReads, TWrites, TStream, TFormat> TransmogStream<TReads, TWrites, TStream, SyncDestination, TFormat>where
TFormat: Clone,
impl<TReads, TWrites, TStream, TFormat> TransmogStream<TReads, TWrites, TStream, SyncDestination, TFormat>where TFormat: Clone,
sourcepub fn new(stream: TStream, format: TFormat) -> Self
pub fn new(stream: TStream, format: TFormat) -> Self
Creates a new instance that sends format
-encoded payloads over stream
.
sourcepub fn default_for(format: TFormat) -> Selfwhere
TStream: Default,
pub fn default_for(format: TFormat) -> Selfwhere TStream: Default,
Creates a new instance that sends format
-encoded payloads over the
default stream for TStream
.
source§impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>where
TFormat: Clone,
impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>where TFormat: Clone,
sourcepub fn for_async(
self
) -> TransmogStream<TReads, TWrites, TStream, AsyncDestination, TFormat>
pub fn for_async( self ) -> TransmogStream<TReads, TWrites, TStream, AsyncDestination, TFormat>
Make this stream include the serialized data’s size before each serialized value.
This is necessary for compatability with a remote TransmogReader
.
sourcepub fn for_sync(
self
) -> TransmogStream<TReads, TWrites, TStream, SyncDestination, TFormat>
pub fn for_sync( self ) -> TransmogStream<TReads, TWrites, TStream, SyncDestination, TFormat>
Make this stream only send Transmog-encoded values.
This is necessary for compatability with stock Transmog receivers.
source§impl<TReads, TWrites, TDestination, TFormat> TransmogStream<TReads, TWrites, TcpStream, TDestination, TFormat>where
TFormat: Clone,
impl<TReads, TWrites, TDestination, TFormat> TransmogStream<TReads, TWrites, TcpStream, TDestination, TFormat>where TFormat: Clone,
sourcepub fn tcp_split(
&mut self
) -> (TransmogTokioTcpReader<'_, TReads, TFormat>, TransmogTokioTcpWriter<'_, TWrites, TDestination, TFormat>)
pub fn tcp_split( &mut self ) -> (TransmogTokioTcpReader<'_, TReads, TFormat>, TransmogTokioTcpWriter<'_, TWrites, TDestination, TFormat>)
Split a TCP-based stream into a read half and a write half.
This is more performant than using a lock-based split like the one provided by tokio-io
or futures-util
since we know that reads and writes to a TcpStream
can continue
concurrently.
Any partially sent or received state is preserved.
Trait Implementations§
source§impl<TReads: Debug, TWrites: Debug, TStream: Debug, TDestination: Debug, TFormat: Debug> Debug for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
impl<TReads: Debug, TWrites: Debug, TStream: Debug, TDestination: Debug, TFormat: Debug> Debug for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
source§impl<TReads, TWrites, TStream, TDestination, TFormat> Sink<TWrites> for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>where
TStream: Unpin,
TransmogWriter<TStream, TWrites, TDestination, TFormat>: Sink<TWrites, Error = TFormat::Error>,
TFormat: Format<'static, TWrites>,
impl<TReads, TWrites, TStream, TDestination, TFormat> Sink<TWrites> for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>where TStream: Unpin, TransmogWriter<TStream, TWrites, TDestination, TFormat>: Sink<TWrites, Error = TFormat::Error>, TFormat: Format<'static, TWrites>,
§type Error = <TFormat as Format<'static, TWrites>>::Error
type Error = <TFormat as Format<'static, TWrites>>::Error
source§fn poll_ready(
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>
fn poll_ready( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Result<(), Self::Error>>
Sink
to receive a value. Read moresource§fn start_send(self: Pin<&mut Self>, item: TWrites) -> Result<(), Self::Error>
fn start_send(self: Pin<&mut Self>, item: TWrites) -> Result<(), Self::Error>
poll_ready
which returned Poll::Ready(Ok(()))
. Read more