Struct asynchronous_codec::FramedWrite
source · pub struct FramedWrite<T, E> { /* private fields */ }
Expand description
A Sink
of frames encoded to an AsyncWrite
.
Example
use bytes::Bytes;
use asynchronous_codec::{FramedWrite, BytesCodec};
use futures::SinkExt;
let mut buf = Vec::new();
let mut framed = FramedWrite::new(&mut buf, BytesCodec {});
let bytes = Bytes::from("Hello World!");
framed.send(bytes.clone()).await?;
assert_eq!(&buf[..], &bytes[..]);
Implementations§
source§impl<T, E> FramedWrite<T, E>where
T: AsyncWrite,
E: Encoder,
impl<T, E> FramedWrite<T, E>where T: AsyncWrite, E: Encoder,
sourcepub fn new(inner: T, encoder: E) -> Self
pub fn new(inner: T, encoder: E) -> Self
Creates a new FramedWrite
transport with the given Encoder
.
sourcepub fn from_parts(_: FramedWriteParts<T, E>) -> Self
pub fn from_parts(_: FramedWriteParts<T, E>) -> Self
Creates a new FramedWrite
from FramedWriteParts
.
See also FramedWrite::into_parts
.
sourcepub fn send_high_water_mark(&self) -> usize
pub fn send_high_water_mark(&self) -> usize
High-water mark for writes, in bytes
The send high-water mark prevents the FramedWrite
from accepting additional messages to send when its
buffer exceeds this length, in bytes. Attempts to enqueue
additional messages will be deferred until progress is
made on the underlying AsyncWrite
. This applies
back-pressure on fast senders and prevents unbounded
buffer growth.
sourcepub fn set_send_high_water_mark(&mut self, hwm: usize)
pub fn set_send_high_water_mark(&mut self, hwm: usize)
Sets high-water mark for writes, in bytes
The send high-water mark prevents the FramedWrite
from accepting additional messages to send when its
buffer exceeds this length, in bytes. Attempts to enqueue
additional messages will be deferred until progress is
made on the underlying AsyncWrite
. This applies
back-pressure on fast senders and prevents unbounded
buffer growth.
The default high-water mark is 2^17 bytes. Applications
which desire low latency may wish to reduce this value.
There is little point to increasing this value beyond
your socket’s SO_SNDBUF
size. On linux, this defaults
to 212992 bytes but is user-adjustable.
sourcepub fn into_parts(self) -> FramedWriteParts<T, E>
pub fn into_parts(self) -> FramedWriteParts<T, E>
Consumes the FramedWrite
, returning its parts such that
a new FramedWrite
may be constructed, possibly with a different encoder.
See also FramedWrite::from_parts
.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes the FramedWrite
, returning its underlying I/O stream.
Note that data that has already been written but not yet flushed
is dropped. To retain any such potentially buffered data, use
FramedWrite::into_parts()
.
sourcepub fn encoder(&self) -> &E
pub fn encoder(&self) -> &E
Returns a reference to the underlying encoder.
Note that care should be taken to not tamper with the underlying encoder as it may corrupt the stream of frames otherwise being worked with.
sourcepub fn encoder_mut(&mut self) -> &mut E
pub fn encoder_mut(&mut self) -> &mut E
Returns a mutable reference to the underlying encoder.
Note that care should be taken to not tamper with the underlying encoder as it may corrupt the stream of frames otherwise being worked with.
Trait Implementations§
source§impl<T, E> Deref for FramedWrite<T, E>
impl<T, E> Deref for FramedWrite<T, E>
source§impl<T, E> DerefMut for FramedWrite<T, E>
impl<T, E> DerefMut for FramedWrite<T, E>
source§impl<T, E> Sink<<E as Encoder>::Item> for FramedWrite<T, E>where
T: AsyncWrite + Unpin,
E: Encoder,
impl<T, E> Sink<<E as Encoder>::Item> for FramedWrite<T, E>where T: AsyncWrite + Unpin, E: Encoder,
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: E::Item) -> Result<(), Self::Error>
fn start_send(self: Pin<&mut Self>, item: E::Item) -> Result<(), Self::Error>
poll_ready
which returned Poll::Ready(Ok(()))
. Read moreimpl<'__pin, T, E> Unpin for FramedWrite<T, E>where __Origin<'__pin, T, E>: Unpin,
Auto Trait Implementations§
impl<T, E> RefUnwindSafe for FramedWrite<T, E>where E: RefUnwindSafe, T: RefUnwindSafe,
impl<T, E> Send for FramedWrite<T, E>where E: Send, T: Send,
impl<T, E> Sync for FramedWrite<T, E>where E: Sync, T: Sync,
impl<T, E> UnwindSafe for FramedWrite<T, E>where E: UnwindSafe, T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T, Item> SinkExt<Item> for Twhere
T: Sink<Item> + ?Sized,
impl<T, Item> SinkExt<Item> for Twhere T: Sink<Item> + ?Sized,
source§fn with<U, Fut, F, E>(self, f: F) -> With<Self, Item, U, Fut, F>where
F: FnMut(U) -> Fut,
Fut: Future<Output = Result<Item, E>>,
E: From<Self::Error>,
Self: Sized,
fn with<U, Fut, F, E>(self, f: F) -> With<Self, Item, U, Fut, F>where F: FnMut(U) -> Fut, Fut: Future<Output = Result<Item, E>>, E: From<Self::Error>, Self: Sized,
source§fn with_flat_map<U, St, F>(self, f: F) -> WithFlatMap<Self, Item, U, St, F>where
F: FnMut(U) -> St,
St: Stream<Item = Result<Item, Self::Error>>,
Self: Sized,
fn with_flat_map<U, St, F>(self, f: F) -> WithFlatMap<Self, Item, U, St, F>where F: FnMut(U) -> St, St: Stream<Item = Result<Item, Self::Error>>, Self: Sized,
source§fn sink_map_err<E, F>(self, f: F) -> SinkMapErr<Self, F>where
F: FnOnce(Self::Error) -> E,
Self: Sized,
fn sink_map_err<E, F>(self, f: F) -> SinkMapErr<Self, F>where F: FnOnce(Self::Error) -> E, Self: Sized,
source§fn sink_err_into<E>(self) -> SinkErrInto<Self, Item, E>where
Self: Sized,
Self::Error: Into<E>,
fn sink_err_into<E>(self) -> SinkErrInto<Self, Item, E>where Self: Sized, Self::Error: Into<E>,
Into
trait. Read moresource§fn buffer(self, capacity: usize) -> Buffer<Self, Item>where
Self: Sized,
fn buffer(self, capacity: usize) -> Buffer<Self, Item>where Self: Sized,
source§fn fanout<Si>(self, other: Si) -> Fanout<Self, Si>where
Self: Sized,
Item: Clone,
Si: Sink<Item, Error = Self::Error>,
fn fanout<Si>(self, other: Si) -> Fanout<Self, Si>where Self: Sized, Item: Clone, Si: Sink<Item, Error = Self::Error>,
source§fn flush(&mut self) -> Flush<'_, Self, Item>where
Self: Unpin,
fn flush(&mut self) -> Flush<'_, Self, Item>where Self: Unpin,
source§fn send(&mut self, item: Item) -> Send<'_, Self, Item>where
Self: Unpin,
fn send(&mut self, item: Item) -> Send<'_, Self, Item>where Self: Unpin,
source§fn feed(&mut self, item: Item) -> Feed<'_, Self, Item>where
Self: Unpin,
fn feed(&mut self, item: Item) -> Feed<'_, Self, Item>where Self: Unpin,
source§fn send_all<St, 'a>(&'a mut self, stream: &'a mut St) -> SendAll<'a, Self, St>where
St: TryStream<Ok = Item, Error = Self::Error> + Stream + Unpin + ?Sized,
Self: Unpin,
fn send_all<St, 'a>(&'a mut self, stream: &'a mut St) -> SendAll<'a, Self, St>where St: TryStream<Ok = Item, Error = Self::Error> + Stream + Unpin + ?Sized, Self: Unpin,
source§fn left_sink<Si2>(self) -> Either<Self, Si2>where
Si2: Sink<Item, Error = Self::Error>,
Self: Sized,
fn left_sink<Si2>(self) -> Either<Self, Si2>where Si2: Sink<Item, Error = Self::Error>, Self: Sized,
source§fn right_sink<Si1>(self) -> Either<Si1, Self>where
Si1: Sink<Item, Error = Self::Error>,
Self: Sized,
fn right_sink<Si1>(self) -> Either<Si1, Self>where Si1: Sink<Item, Error = Self::Error>, Self: Sized,
source§fn poll_ready_unpin(
&mut self,
cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>where
Self: Unpin,
fn poll_ready_unpin( &mut self, cx: &mut Context<'_> ) -> Poll<Result<(), Self::Error>>where Self: Unpin,
Sink::poll_ready
on Unpin
sink types.source§fn start_send_unpin(&mut self, item: Item) -> Result<(), Self::Error>where
Self: Unpin,
fn start_send_unpin(&mut self, item: Item) -> Result<(), Self::Error>where Self: Unpin,
Sink::start_send
on Unpin
sink types.