pub struct TeeWriter<P, B> { /* private fields */ }Expand description
Writer wrapper that mirrors accepted bytes into a branch writer.
TeeWriter writes to the primary writer first, then writes exactly the
accepted bytes into the branch writer with Write::write_all. If the
branch writer fails, the primary writer may already have accepted bytes and
the branch error is returned.
Seeking moves the primary writer first, then seeks the branch writer to the primary writer’s resulting absolute position. If the branch seek fails, the primary writer may already have moved.
§Examples
use std::io::Write;
use qubit_io::TeeWriter;
let primary = Vec::new();
let branch = Vec::new();
let mut writer = TeeWriter::new(primary, branch);
writer.write_all(b"abc")?;
let (primary, branch) = writer.into_inner();
assert_eq!(b"abc", primary.as_slice());
assert_eq!(b"abc", branch.as_slice());Implementations§
Source§impl<P, B> TeeWriter<P, B>
impl<P, B> TeeWriter<P, B>
Sourcepub fn primary_ref(&self) -> &P
pub fn primary_ref(&self) -> &P
Sourcepub fn primary_mut(&mut self) -> &mut P
pub fn primary_mut(&mut self) -> &mut P
Sourcepub fn branch_ref(&self) -> &B
pub fn branch_ref(&self) -> &B
Sourcepub fn branch_mut(&mut self) -> &mut B
pub fn branch_mut(&mut self) -> &mut B
Sourcepub fn into_inner(self) -> (P, B)
pub fn into_inner(self) -> (P, B)
Consumes this wrapper and returns both wrapped writers.
§Returns
A tuple containing the primary writer and branch writer.
Trait Implementations§
Source§impl<P, B> Seek for TeeWriter<P, B>
impl<P, B> Seek for TeeWriter<P, B>
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
Source§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
🔬This is a nightly-only experimental API. (
seek_stream_len)Returns the length of this stream (in bytes). Read more
Source§impl<P, B> Write for TeeWriter<P, B>
impl<P, B> Write for TeeWriter<P, B>
Source§fn write(&mut self, buffer: &[u8]) -> Result<usize>
fn write(&mut self, buffer: &[u8]) -> Result<usize>
Writes a buffer into this writer, returning how many bytes were written. Read more
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flushes this output stream, ensuring that all intermediately buffered
contents reach their destination. Read more
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
write_all_vectored)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations§
impl<P, B> Freeze for TeeWriter<P, B>
impl<P, B> RefUnwindSafe for TeeWriter<P, B>where
P: RefUnwindSafe,
B: RefUnwindSafe,
impl<P, B> Send for TeeWriter<P, B>
impl<P, B> Sync for TeeWriter<P, B>
impl<P, B> Unpin for TeeWriter<P, B>
impl<P, B> UnsafeUnpin for TeeWriter<P, B>where
P: UnsafeUnpin,
B: UnsafeUnpin,
impl<P, B> UnwindSafe for TeeWriter<P, B>where
P: UnwindSafe,
B: UnwindSafe,
Blanket Implementations§
Source§impl<W> BinaryWriteExt for W
impl<W> BinaryWriteExt for W
Source§fn write_u16(&mut self, value: u16, byte_order: ByteOrder) -> Result<()>
fn write_u16(&mut self, value: u16, byte_order: ByteOrder) -> Result<()>
Writes an unsigned 16-bit integer using a runtime byte order.
Source§fn write_u16_be(&mut self, value: u16) -> Result<()>
fn write_u16_be(&mut self, value: u16) -> Result<()>
Writes a big-endian unsigned 16-bit integer.
Source§fn write_u16_le(&mut self, value: u16) -> Result<()>
fn write_u16_le(&mut self, value: u16) -> Result<()>
Writes a little-endian unsigned 16-bit integer.
Source§fn write_u32(&mut self, value: u32, byte_order: ByteOrder) -> Result<()>
fn write_u32(&mut self, value: u32, byte_order: ByteOrder) -> Result<()>
Writes an unsigned 32-bit integer using a runtime byte order.
Source§fn write_u32_be(&mut self, value: u32) -> Result<()>
fn write_u32_be(&mut self, value: u32) -> Result<()>
Writes a big-endian unsigned 32-bit integer.
Source§fn write_u32_le(&mut self, value: u32) -> Result<()>
fn write_u32_le(&mut self, value: u32) -> Result<()>
Writes a little-endian unsigned 32-bit integer.
Source§fn write_u64(&mut self, value: u64, byte_order: ByteOrder) -> Result<()>
fn write_u64(&mut self, value: u64, byte_order: ByteOrder) -> Result<()>
Writes an unsigned 64-bit integer using a runtime byte order.
Source§fn write_u64_be(&mut self, value: u64) -> Result<()>
fn write_u64_be(&mut self, value: u64) -> Result<()>
Writes a big-endian unsigned 64-bit integer.
Source§fn write_u64_le(&mut self, value: u64) -> Result<()>
fn write_u64_le(&mut self, value: u64) -> Result<()>
Writes a little-endian unsigned 64-bit integer.
Source§fn write_u128(&mut self, value: u128, byte_order: ByteOrder) -> Result<()>
fn write_u128(&mut self, value: u128, byte_order: ByteOrder) -> Result<()>
Writes an unsigned 128-bit integer using a runtime byte order.
Source§fn write_u128_be(&mut self, value: u128) -> Result<()>
fn write_u128_be(&mut self, value: u128) -> Result<()>
Writes a big-endian unsigned 128-bit integer.
Source§fn write_u128_le(&mut self, value: u128) -> Result<()>
fn write_u128_le(&mut self, value: u128) -> Result<()>
Writes a little-endian unsigned 128-bit integer.
Source§fn write_i16(&mut self, value: i16, byte_order: ByteOrder) -> Result<()>
fn write_i16(&mut self, value: i16, byte_order: ByteOrder) -> Result<()>
Writes a signed 16-bit integer using a runtime byte order.
Source§fn write_i16_be(&mut self, value: i16) -> Result<()>
fn write_i16_be(&mut self, value: i16) -> Result<()>
Writes a big-endian signed 16-bit integer.
Source§fn write_i16_le(&mut self, value: i16) -> Result<()>
fn write_i16_le(&mut self, value: i16) -> Result<()>
Writes a little-endian signed 16-bit integer.
Source§fn write_i32(&mut self, value: i32, byte_order: ByteOrder) -> Result<()>
fn write_i32(&mut self, value: i32, byte_order: ByteOrder) -> Result<()>
Writes a signed 32-bit integer using a runtime byte order.
Source§fn write_i32_be(&mut self, value: i32) -> Result<()>
fn write_i32_be(&mut self, value: i32) -> Result<()>
Writes a big-endian signed 32-bit integer.
Source§fn write_i32_le(&mut self, value: i32) -> Result<()>
fn write_i32_le(&mut self, value: i32) -> Result<()>
Writes a little-endian signed 32-bit integer.
Source§fn write_i64(&mut self, value: i64, byte_order: ByteOrder) -> Result<()>
fn write_i64(&mut self, value: i64, byte_order: ByteOrder) -> Result<()>
Writes a signed 64-bit integer using a runtime byte order.
Source§fn write_i64_be(&mut self, value: i64) -> Result<()>
fn write_i64_be(&mut self, value: i64) -> Result<()>
Writes a big-endian signed 64-bit integer.
Source§fn write_i64_le(&mut self, value: i64) -> Result<()>
fn write_i64_le(&mut self, value: i64) -> Result<()>
Writes a little-endian signed 64-bit integer.
Source§fn write_i128(&mut self, value: i128, byte_order: ByteOrder) -> Result<()>
fn write_i128(&mut self, value: i128, byte_order: ByteOrder) -> Result<()>
Writes a signed 128-bit integer using a runtime byte order.
Source§fn write_i128_be(&mut self, value: i128) -> Result<()>
fn write_i128_be(&mut self, value: i128) -> Result<()>
Writes a big-endian signed 128-bit integer.
Source§fn write_i128_le(&mut self, value: i128) -> Result<()>
fn write_i128_le(&mut self, value: i128) -> Result<()>
Writes a little-endian signed 128-bit integer.
Source§fn write_f32(&mut self, value: f32, byte_order: ByteOrder) -> Result<()>
fn write_f32(&mut self, value: f32, byte_order: ByteOrder) -> Result<()>
Writes a 32-bit float using a runtime byte order.
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
Mutably borrows from an owned value. Read more
Source§impl<W> Leb128WriteExt for W
impl<W> Leb128WriteExt for W
Source§impl<T> StringWriteExt for T
impl<T> StringWriteExt for T
Source§fn write_utf8_payload(&mut self, value: &str) -> Result<(), Error>
fn write_utf8_payload(&mut self, value: &str) -> Result<(), Error>
Writes a UTF-8 payload without a length prefix. Read more
Source§fn write_utf8_string_uleb(&mut self, value: &str) -> Result<(), Error>
fn write_utf8_string_uleb(&mut self, value: &str) -> Result<(), Error>
Writes a UTF-8 string with an unsigned LEB128 byte-length prefix. Read more
Source§fn write_utf8_string_u16(
&mut self,
value: &str,
byte_order: ByteOrder,
) -> Result<(), Error>
fn write_utf8_string_u16( &mut self, value: &str, byte_order: ByteOrder, ) -> Result<(), Error>
Writes a UTF-8 string with a runtime-order
u16 byte-length prefix. Read moreSource§fn write_utf8_string_u16_be(&mut self, value: &str) -> Result<(), Error>
fn write_utf8_string_u16_be(&mut self, value: &str) -> Result<(), Error>
Writes a UTF-8 string with a big-endian
u16 byte-length prefix. Read moreSource§fn write_utf8_string_u16_le(&mut self, value: &str) -> Result<(), Error>
fn write_utf8_string_u16_le(&mut self, value: &str) -> Result<(), Error>
Writes a UTF-8 string with a little-endian
u16 byte-length prefix. Read moreSource§fn write_utf8_string_u32(
&mut self,
value: &str,
byte_order: ByteOrder,
) -> Result<(), Error>
fn write_utf8_string_u32( &mut self, value: &str, byte_order: ByteOrder, ) -> Result<(), Error>
Writes a UTF-8 string with a runtime-order
u32 byte-length prefix. Read more