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
impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
impl<TReads, TWrites, TStream, TDestination, TFormat> TransmogStream<TReads, TWrites, TStream, TDestination, TFormat>
Gets a reference to the underlying stream.
It is inadvisable to directly read from or write to the underlying stream.
Gets a mutable reference to the underlying stream.
It is inadvisable to directly read from or write to the underlying stream.
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.
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,
Creates a new instance that sends format
-encoded payloads over stream
.
Creates a new instance that sends format
-encoded payloads over the
default stream for TStream
.
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,
pub 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
.
Make this stream only send Transmog-encoded values.
This is necessary for compatability with stock Transmog receivers.
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,
pub 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
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>,
impl<TReads, TWrites, TStream, TDestination, TFormat> Stream for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat> where
TStream: Unpin,
TransmogReader<InternalTransmogWriter<TStream, TWrites, TDestination, TFormat>, TReads, TFormat>: Stream<Item = Result<TReads, TFormat::Error>>,
TFormat: Format<'static, TWrites>,
impl<TReads, TWrites, TStream, TDestination, TFormat> Stream for TransmogStream<TReads, TWrites, TStream, TDestination, TFormat> where
TStream: Unpin,
TransmogReader<InternalTransmogWriter<TStream, TWrites, TDestination, TFormat>, TReads, TFormat>: Stream<Item = Result<TReads, TFormat::Error>>,
TFormat: Format<'static, TWrites>,
Attempt to pull out the next value of this stream, registering the
current task for wakeup if the value is not yet available, and returning
None
if the stream is exhausted. Read more