Struct Framed
pub struct Framed<T, U> { /* private fields */ }
A unified Stream and Sink interface to an underlying I/O object, using
the Encoder and Decoder traits to encode and decode frames.
You can create a Framed instance by using the Decoder::framed adapter, or
by using the new function seen below.
Cancellation safety
futures_util::sink::SinkExt::send: if send is used as the event in atokio::select!statement and some other branch completes first, then it is guaranteed that the message was not sent, but the message itself is lost.tokio_stream::StreamExt::next: This method is cancel safe. The returned future only holds onto a reference to the underlying stream, so dropping it will never lose a value.
Implementations
impl<T, U> Framed<T, U>
fn new(inner: T, codec: U) -> Framed<T, U>Provides a
StreamandSinkinterface for reading and writing to this I/O object, usingDecoderandEncoderto read and write the raw data.Raw I/O objects work with byte sequences, but higher-level code usually wants to batch these into meaningful chunks, called "frames". This method layers framing on top of an I/O object, by using the codec traits to handle encoding and decoding of messages frames. Note that the incoming and outgoing frame types may be distinct.
This function returns a single object that is both
StreamandSink; grouping this into a single object is often useful for layering things like gzip or TLS, which require both read and write access to the underlying object.If you want to work more directly with the streams and sink, consider calling
spliton theFramedreturned by this method, which will break them into separate objects, allowing them to interact more easily.Note that, for some byte sources, the stream can be resumed after an EOF by reading from it, even after it has returned
None. Repeated attempts to do so, without new data available, continue to returnNonewithout creating more (closing) frames.fn with_capacity(inner: T, codec: U, capacity: usize) -> Framed<T, U>Provides a
StreamandSinkinterface for reading and writing to this I/O object, usingDecoderandEncoderto read and write the raw data, with a specific read buffer initial capacity.Raw I/O objects work with byte sequences, but higher-level code usually wants to batch these into meaningful chunks, called "frames". This method layers framing on top of an I/O object, by using the codec traits to handle encoding and decoding of messages frames. Note that the incoming and outgoing frame types may be distinct.
This function returns a single object that is both
StreamandSink; grouping this into a single object is often useful for layering things like gzip or TLS, which require both read and write access to the underlying object.If you want to work more directly with the streams and sink, consider calling
spliton theFramedreturned by this method, which will break them into separate objects, allowing them to interact more easily.fn from_parts(parts: FramedParts<T, U>) -> Framed<T, U>Provides a
StreamandSinkinterface for reading and writing to this I/O object, usingDecoderandEncoderto read and write the raw data.Raw I/O objects work with byte sequences, but higher-level code usually wants to batch these into meaningful chunks, called "frames". This method layers framing on top of an I/O object, by using the
Codectraits to handle encoding and decoding of messages frames. Note that the incoming and outgoing frame types may be distinct.This function returns a single object that is both
StreamandSink; grouping this into a single object is often useful for layering things like gzip or TLS, which require both read and write access to the underlying object.This objects takes a stream and a
readbufferand awritebuffer. These field can be obtained from an existingFramedwith theinto_partsmethod.If you want to work more directly with the streams and sink, consider calling
spliton theFramedreturned by this method, which will break them into separate objects, allowing them to interact more easily.fn get_ref(&self) -> &TReturns a reference to the underlying I/O stream wrapped by
Framed.Note that care should be taken to not tamper with the underlying stream of data coming in as it may corrupt the stream of frames otherwise being worked with.
fn get_mut(&mut self) -> &mut TReturns a mutable reference to the underlying I/O stream wrapped by
Framed.Note that care should be taken to not tamper with the underlying stream of data coming in as it may corrupt the stream of frames otherwise being worked with.
fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T>Returns a pinned mutable reference to the underlying I/O stream wrapped by
Framed.Note that care should be taken to not tamper with the underlying stream of data coming in as it may corrupt the stream of frames otherwise being worked with.
fn codec(&self) -> &UReturns a reference to the underlying codec wrapped by
Framed.Note that care should be taken to not tamper with the underlying codec as it may corrupt the stream of frames otherwise being worked with.
fn codec_mut(&mut self) -> &mut UReturns a mutable reference to the underlying codec wrapped by
Framed.Note that care should be taken to not tamper with the underlying codec as it may corrupt the stream of frames otherwise being worked with.
fn map_codec<C, F>(self, map: F) -> Framed<T, C> where F: FnOnce(U) -> C,Maps the codec
UtoC, preserving the read and write buffers wrapped byFramed.Note that care should be taken to not tamper with the underlying codec as it may corrupt the stream of frames otherwise being worked with.
fn codec_pin_mut(self: Pin<&mut Self>) -> &mut UReturns a mutable reference to the underlying codec wrapped by
Framed.Note that care should be taken to not tamper with the underlying codec as it may corrupt the stream of frames otherwise being worked with.
fn read_buffer(&self) -> &BytesMutReturns a reference to the read buffer.
fn read_buffer_mut(&mut self) -> &mut BytesMutReturns a mutable reference to the read buffer.
fn write_buffer(&self) -> &BytesMutReturns a reference to the write buffer.
fn write_buffer_mut(&mut self) -> &mut BytesMutReturns a mutable reference to the write buffer.
fn backpressure_boundary(&self) -> usizeReturns backpressure boundary
fn set_backpressure_boundary(&mut self, boundary: usize)Updates backpressure boundary
fn into_inner(self) -> TConsumes the
Framed, returning its underlying I/O stream.Note that care should be taken to not tamper with the underlying stream of data coming in as it may corrupt the stream of frames otherwise being worked with.
fn into_parts(self) -> FramedParts<T, U>Consumes the
Framed, returning its underlying I/O stream, the buffer with unprocessed data, and the codec.Note that care should be taken to not tamper with the underlying stream of data coming in as it may corrupt the stream of frames otherwise being worked with.
Trait Implementations
impl<'__pin, T, U> Unpin for Framed<T, U>
where
PinnedFieldsOf<__Origin<'__pin, T, U>>: Unpin,
impl<T, I, U> Sink<I> for Framed<T, U>
where
T: AsyncWrite,
U: Encoder<I>,
U::Error: From<Error>,
type Error = <U as Encoder<I>>::Error;fn poll_ready(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>fn start_send(self: Pin<&mut Self>, item: I) -> Result<(), Self::Error>fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>
impl<T, U> Debug for Framed<T, U>
where
T: Debug,
U: Debug,
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T, U> Stream for Framed<T, U>
where
T: AsyncRead,
U: Decoder,
type Item = Result<<U as Decoder>::Item, <U as Decoder>::Error>;fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>
Auto Trait Implementations
impl<T, U> Freeze for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: Freeze,
impl<T, U> RefUnwindSafe for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: RefUnwindSafe,
impl<T, U> Send for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: Send,
impl<T, U> Sync for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: Sync,
impl<T, U> UnsafeUnpin for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: UnsafeUnpin,
impl<T, U> UnwindSafe for Framed<T, U>
where
FramedImpl<T, U, RWFrames>: UnwindSafe,
Blanket Implementations
impl<S, T, E> TryStream for Framed<T, U>
where
S: Stream<Item = Result<T, E>> + ?Sized,
type Ok = T;type Error = E;fn try_poll_next(self: Pin<&mut S>, cx: &mut Context<'_>) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>
impl<T> Any for Framed<T, U>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for Framed<T, U>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for Framed<T, U>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> From<T> for Framed<T, U>
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into<U> for Framed<T, U>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for Framed<T, U>
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for Framed<T, U>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>