pub struct IoWriteSink<'a, W: ?Sized> { /* private fields */ }Expand description
JsonWrite sink that forwards to any std::io::Write implementor.
The natural target for serializing JSON to a file, socket, or other
byte stream. Errors propagate through the sink’s Self::Error,
which is std::io::Error.
Implementations§
Trait Implementations§
Source§impl<W: Write + ?Sized> JsonWrite for IoWriteSink<'_, W>
Available on crate feature std only.
impl<W: Write + ?Sized> JsonWrite for IoWriteSink<'_, W>
Available on crate feature
std only.Source§type Error = Error
type Error = Error
Sink-specific error type.
StringSink uses core::convert::Infallible
for the byte/string writes; the typed-level to_string entry point
widens to crate::Error so non-finite floats can surface.Source§fn write_byte(&mut self, b: u8) -> Result<(), Self::Error>
fn write_byte(&mut self, b: u8) -> Result<(), Self::Error>
Append a single ASCII byte. Used for structural punctuation
(
{, }, [, ], ,, :, ").Source§fn write_str_raw(&mut self, s: &str) -> Result<(), Self::Error>
fn write_str_raw(&mut self, s: &str) -> Result<(), Self::Error>
Append a
&str verbatim. Caller is responsible for any escaping
— this is the structural / pre-escaped path. For user string
payloads, call Self::write_escaped_str instead.Source§fn write_float_f64(&mut self, f: f64) -> Result<(), Self::Error>
fn write_float_f64(&mut self, f: f64) -> Result<(), Self::Error>
Write a finite
f64 as a JSON number. Non-finite inputs (inf,
-inf, NaN) have no JSON representation; sinks reject them
via their Self::Error type. Read moreSource§fn reserve_hint(&mut self, _additional: usize)
fn reserve_hint(&mut self, _additional: usize)
Source§unsafe fn write_byte_unchecked(&mut self, b: u8) -> Result<(), Self::Error>
unsafe fn write_byte_unchecked(&mut self, b: u8) -> Result<(), Self::Error>
Append a single ASCII byte WITHOUT a per-write capacity check. Read more
Source§fn write_escaped_str(&mut self, s: &str) -> Result<(), Self::Error>
fn write_escaped_str(&mut self, s: &str) -> Result<(), Self::Error>
Append a JSON-quoted, escaped string (including the surrounding
" characters). The default impl escapes one byte at a time
through write_byte; sinks with bulk-write capability (like
StringSink) override with a literal-run fast path.Source§fn write_raw_bytes(&mut self, b: &[u8]) -> Result<(), Self::Error>
fn write_raw_bytes(&mut self, b: &[u8]) -> Result<(), Self::Error>
Append a byte slice whose contents are known-valid UTF-8. Read more
Source§fn write_int_i64(&mut self, n: i64) -> Result<(), Self::Error>
fn write_int_i64(&mut self, n: i64) -> Result<(), Self::Error>
Write a signed 64-bit integer as a JSON number.
Source§fn write_int_u64(&mut self, n: u64) -> Result<(), Self::Error>
fn write_int_u64(&mut self, n: u64) -> Result<(), Self::Error>
Write an unsigned 64-bit integer as a JSON number.
Source§fn write_int_i128(&mut self, n: i128) -> Result<(), Self::Error>
fn write_int_i128(&mut self, n: i128) -> Result<(), Self::Error>
Write a signed 128-bit integer as a JSON number.
Source§fn write_int_u128(&mut self, n: u128) -> Result<(), Self::Error>
fn write_int_u128(&mut self, n: u128) -> Result<(), Self::Error>
Write an unsigned 128-bit integer as a JSON number.
Source§unsafe fn write_float_f64_unchecked(
&mut self,
f: f64,
) -> Result<(), Self::Error>
unsafe fn write_float_f64_unchecked( &mut self, f: f64, ) -> Result<(), Self::Error>
Write a finite
f64 ASSUMING the caller has reserved at least
f64::MAX_SERIALIZED_LEN (32) bytes of sink capacity. Skips the
per-call cap check in Vec::extend_from_slice — the second-largest
mispredict source after the comma Vec::push. Read moreSource§unsafe fn write_float_f64_unchecked_finite(
&mut self,
f: f64,
) -> Result<(), Self::Error>
unsafe fn write_float_f64_unchecked_finite( &mut self, f: f64, ) -> Result<(), Self::Error>
Like
write_float_f64_unchecked, but additionally requires the
caller to have validated that f is finite. The per-element
finiteness branch in the bench’s hot loop was the dominant
remaining mispredict source after the cap-check elimination;
hoisting validation to a one-shot pre-scan over the whole slice
removes that branch from the inner loop entirely. Read moreSource§unsafe fn write_float_f64_taint(&mut self, f: f64) -> Result<(), Self::Error>
unsafe fn write_float_f64_taint(&mut self, f: f64) -> Result<(), Self::Error>
Per-element float write that branchlessly tolerates non-finite
input. Tainted bytes (junk ASCII for non-finite values) land in
the sink; the caller is expected to query the sink’s
take_nonfinite_taint() once at the end of the slice and turn a
non-zero result into a typed error. Read moreSource§fn take_nonfinite_taint(&mut self) -> u64
fn take_nonfinite_taint(&mut self) -> u64
Read and clear the accumulated non-finite taint from the sink.
Returns 0 for sinks without taint tracking. The array writer
queries this once after a batch of
write_float_f64_taint
calls; a non-zero result means at least one input was inf/NaN
and the call must return Err(NonFiniteFloat).Auto Trait Implementations§
impl<'a, W> !UnwindSafe for IoWriteSink<'a, W>
impl<'a, W> Freeze for IoWriteSink<'a, W>where
W: ?Sized,
impl<'a, W> RefUnwindSafe for IoWriteSink<'a, W>where
W: RefUnwindSafe + ?Sized,
impl<'a, W> Send for IoWriteSink<'a, W>
impl<'a, W> Sync for IoWriteSink<'a, W>
impl<'a, W> Unpin for IoWriteSink<'a, W>where
W: ?Sized,
impl<'a, W> UnsafeUnpin for IoWriteSink<'a, W>where
W: ?Sized,
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
Mutably borrows from an owned value. Read more