pub struct TextDuplexer<Inner: HalfDuplex + ReadStr + WriteStr> { /* private fields */ }
Expand description

A HalfDuplex implementation which translates from an input HalfDuplex implementation producing an arbitrary byte sequence into a valid Basic Text stream.

Implementations§

source§

impl<Inner: HalfDuplex> TextDuplexer<Utf8Duplexer<LayeredDuplexer<Inner>>>

source

pub fn new(inner: Inner) -> Self

Construct a new instance of TextDuplexer wrapping inner, which can be anything that implements HalfDuplex.

source

pub fn with_bom_compatibility(inner: Inner) -> Result<Self>

Like new, but writes a U+FEFF (BOM) to the beginning of the output stream for compatibility with consumers that require that to determine the text encoding.

source

pub fn with_crlf_compatibility(inner: Inner) -> Self

Like new, but enables CRLF output mode, which translates “\n” to “\r\n” for compatibility with consumers that need that.

Note: This is not often needed; even on Windows these days most things are ok with plain ‘\n’ line endings, including Windows Notepad. The main notable things that really need them are IETF RFCs, for example RFC-5198.

source

pub fn with_nel_compatibility(inner: Inner) -> Result<Self>

Like new, but replaces U+85 (NEL) with U+A instead of U+20.

source

pub fn with_lsps_compatibility(inner: Inner) -> Result<Self>

Like new, but replaces U+2028 (LS) and U+2029 (PS) with U+A instead of U+20.

source§

impl<Inner: HalfDuplex + ReadStr + ReadLayered + ReadStrLayered + WriteStr + WriteLayered> TextDuplexer<Inner>

source

pub fn from_utf8(inner: Inner) -> Self

Construct a new instance of TextDuplexer wrapping inner.

source

pub fn from_utf8_with_bom_compatibility(inner: Inner) -> Result<Self>

Like from_utf8, but writes a U+FEFF (BOM) to the beginning of the output stream for compatibility with consumers that require that to determine the text encoding.

source

pub fn from_utf8_with_crlf_compatibility(inner: Inner) -> Self

Like from_utf8, but enables CRLF output mode, which translates “\n” to “\r\n” for compatibility with consumers that need that.

Note: This is not often needed; even on Windows these days most things are ok with plain ‘\n’ line endings, including Windows Notepad. The main notable things that really need them are IETF RFCs, for example RFC-5198.

source

pub fn from_utf8_with_nel_compatibility(inner: Inner) -> Result<Self>

Like from_utf8, but replaces U+85 (NEL) with U+A instead of U+20.

source

pub fn from_utf8_with_lsps_compatibility(inner: Inner) -> Result<Self>

Like from_utf8, but replaces U+2028 (LS) and U+2029 (PS) with U+A instead of U+20.

source

pub fn close_into_inner(self) -> Result<Inner>

Flush and close the underlying stream and return the underlying stream object.

source

pub fn abandon_into_inner(self) -> Inner

Return the underlying stream object.

Trait Implementations§

source§

impl<Inner: HalfDuplexLayered + ReadStr + WriteStr + AsFd> AsFd for TextDuplexer<Inner>

source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStr + WriteStr + AsRawFd> AsRawFd for TextDuplexer<Inner>

source§

fn as_raw_fd(&self) -> RawFd

Extracts the raw file descriptor. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> Bufferable for TextDuplexer<Inner>

source§

fn suggested_buffer_size(&self) -> usize

A suggested size, in bytes, for buffering for performance.
source§

fn abandon(&mut self)

Close the resource and abandon any pending buffered contents or errors.
source§

impl<Inner: HalfDuplexLayered + ReadStr + WriteStr + Debug> Debug for TextDuplexer<Inner>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> Read for TextDuplexer<Inner>

source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>

Read all bytes until EOF in this source, placing them into buf. Read more
source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize>

Read all bytes until EOF in this source, appending them to buf. Read more
1.36.0 · source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.6.0 · source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Read the exact number of bytes required to fill buf. Read more
source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Read the exact number of bytes required to fill cursor. Read more
1.0.0 · source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adaptor for this instance of Read. Read more
1.0.0 · source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> ReadLayered for TextDuplexer<Inner>

source§

fn read_with_status(&mut self, buf: &mut [u8]) -> Result<(usize, Status)>

Like Read::read, but also returns a Status.
source§

fn minimum_buffer_size(&self) -> usize

Some streams require a buffer of at least a certain size.
source§

fn read_vectored_with_status( &mut self, bufs: &mut [IoSliceMut<'_>] ) -> Result<(usize, Status), Error>

Like Read::read_vectored, but also returns a Status.
source§

fn read_exact_using_status(&mut self, buf: &mut [u8]) -> Result<Status, Error>

Like Read::read_exact, but uses read_with_status to avoid performing an extra read at the end.
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> ReadStr for TextDuplexer<Inner>

source§

fn read_str(&mut self, buf: &mut str) -> Result<usize>

Like read but produces the result in a str. Be sure to check the size field of the return value to see how many bytes were written. Read more
source§

fn read_exact_str(&mut self, buf: &mut str) -> Result<()>

Like read_exact but produces the result in a str.
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> ReadStrLayered for TextDuplexer<Inner>

source§

fn read_str_with_status(&mut self, buf: &mut str) -> Result<(usize, Status)>

Like read_with_status but produces the result in a str. Be sure to check the return value to see how many bytes were written. Read more
source§

fn read_exact_str_using_status(&mut self, buf: &mut str) -> Result<Status>

Like read_exact but produces the result in a str. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> ReadText for TextDuplexer<Inner>

source§

fn read_text_substr(&mut self, buf: &mut TextSubstr) -> Result<usize>

Like read_str but for reading Basic Text content. Note that the resulting data may not be a Basic Text string, as it may be eg. a portion of a stream that starts with a non-starter.
source§

fn read_exact_text_substr(&mut self, buf: &mut TextSubstr) -> Result<()>

Like read_exact_str but for reading Basic Text content. As with read_text, the resulting string may not be a Basic Text string.
source§

fn read_to_text_string(&mut self, buf: &mut TextString) -> Result<usize>

Like read_to_string, but reads into a TextString.
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> ReadTextLayered for TextDuplexer<Inner>

source§

fn read_text_substr_with_status( &mut self, buf: &mut TextSubstr ) -> Result<(usize, Status)>

Like read_str_with_status but for reading Basic Text data. Note that the resulting data may not be a Basic Text string, as it may be eg. a portion of a stream that starts with a non-starter. Read more
source§

fn read_exact_text_substr_using_status( &mut self, buf: &mut TextSubstr ) -> Result<Status>

Like read_exact_str_using_status but for reading Basic Text content. As with read_text, the resulting string may not be a Basic Text string. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> Write for TextDuplexer<Inner>

source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Write a buffer into this writer, returning how many bytes were written. Read more
source§

fn flush(&mut self) -> Result<()>

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize>

Like write, except that it writes from a slice of buffers. Read more
source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
1.0.0 · source§

fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> WriteLayered for TextDuplexer<Inner>

source§

fn close(&mut self) -> Result<()>

Flush any buffers and declare the end of the stream. Subsequent writes will fail.
source§

fn flush_with_status(&mut self, status: Status) -> Result<(), Error>

Like Write::flush, but has a status parameter describing the future of the stream: Read more
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> WriteStr for TextDuplexer<Inner>

source§

fn write_str(&mut self, s: &str) -> Result<()>

Like Write::write_all, but takes a &str, allowing implementors which require valid UTF-8 to avoid re-validating the data.
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> WriteText for TextDuplexer<Inner>

source§

fn write_text_substr(&mut self, s: &TextSubstr) -> Result<()>

Like WriteStr::write_str but writes from a TextSubstr.
source§

fn write_text(&mut self, buf: &TextStr) -> Result<()>

Like WriteStr::write_str but writes from a TextStr.
source§

impl<Inner: HalfDuplexLayered + ReadStrLayered + WriteStr> Duplex for TextDuplexer<Inner>

Auto Trait Implementations§

§

impl<Inner> Freeze for TextDuplexer<Inner>
where Inner: Freeze,

§

impl<Inner> RefUnwindSafe for TextDuplexer<Inner>
where Inner: RefUnwindSafe,

§

impl<Inner> Send for TextDuplexer<Inner>
where Inner: Send,

§

impl<Inner> Sync for TextDuplexer<Inner>
where Inner: Sync,

§

impl<Inner> Unpin for TextDuplexer<Inner>
where Inner: Unpin,

§

impl<Inner> UnwindSafe for TextDuplexer<Inner>
where Inner: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> AsFilelike for T
where T: AsFd,

source§

fn as_filelike(&self) -> BorrowedFd<'_>

Borrows the reference. Read more
source§

fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>
where Target: FilelikeViewType,

Return a borrowing view of a resource which dereferences to a &Target. Read more
source§

impl<T> AsGrip for T
where T: AsFd,

source§

fn as_grip(&self) -> BorrowedFd<'_>

Extracts the grip.
source§

impl<T> AsRawFilelike for T
where T: AsRawFd,

source§

fn as_raw_filelike(&self) -> i32

Returns the raw value.
source§

impl<T> AsRawGrip for T
where T: AsRawFd,

source§

fn as_raw_grip(&self) -> i32

Extracts the raw grip.
source§

impl<T> AsRawSocketlike for T
where T: AsRawFd,

source§

fn as_raw_socketlike(&self) -> i32

Returns the raw value.
source§

impl<T> AsSocketlike for T
where T: AsFd,

source§

fn as_socketlike(&self) -> BorrowedFd<'_>

Borrows the reference.
source§

fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>
where Target: SocketlikeViewType,

Return a borrowing view of a resource which dereferences to a &Target. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> HalfDuplex for T
where T: Duplex + Read + Write,

source§

impl<T> HalfDuplexLayered for T