pub struct BufReadDecoder<B: BufRead> { /* private fields */ }Expand description
Wraps a std::io::BufRead buffered byte stream and decode it as UTF-8.
§Examples
Lossy decoding of an in-memory byte stream:
use std::io::BufReader;
use utf8_zero::BufReadDecoder;
let input = b"Hello \xF0\x9F\x8C\x8D\xC0world";
let reader = BufReader::new(&input[..]);
let output = BufReadDecoder::read_to_string_lossy(reader).unwrap();
assert_eq!(output, "Hello \u{1F30D}\u{FFFD}world");Strict chunk-by-chunk decoding:
use std::io::BufReader;
use utf8_zero::{BufReadDecoder, BufReadDecoderError};
let input = b"ok\xFFend";
let mut decoder = BufReadDecoder::new(BufReader::new(&input[..]));
let mut parts = Vec::new();
while let Some(result) = decoder.next_strict() {
match result {
Ok(s) => parts.push(format!("str:{s}")),
Err(BufReadDecoderError::InvalidByteSequence(b)) => {
parts.push(format!("err:{b:02x?}"));
}
Err(BufReadDecoderError::Io(e)) => panic!("io error: {e}"),
}
}
assert_eq!(parts, vec!["str:ok", "err:[ff]", "str:end"]);Implementations§
Source§impl<B: BufRead> BufReadDecoder<B>
impl<B: BufRead> BufReadDecoder<B>
Sourcepub fn read_to_string_lossy(buf_read: B) -> Result<String>
pub fn read_to_string_lossy(buf_read: B) -> Result<String>
This is to Read::read_to_string what String::from_utf8_lossy is to String::from_utf8.
Sourcepub fn next_lossy(&mut self) -> Option<Result<&str>>
pub fn next_lossy(&mut self) -> Option<Result<&str>>
Same as BufReadDecoder::next_strict, but replace UTF-8 errors with U+FFFD.
Sourcepub fn next_strict(&mut self) -> Option<Result<&str, BufReadDecoderError<'_>>>
pub fn next_strict(&mut self) -> Option<Result<&str, BufReadDecoderError<'_>>>
Decode and consume the next chunk of UTF-8 input.
This method is intended to be called repeatedly until it returns None,
which represents EOF from the underlying byte stream.
This is similar to Iterator::next,
except that decoded chunks borrow the decoder (~iterator)
so they need to be handled or copied before the next chunk can start decoding.
Auto Trait Implementations§
impl<B> Freeze for BufReadDecoder<B>where
B: Freeze,
impl<B> RefUnwindSafe for BufReadDecoder<B>where
B: RefUnwindSafe,
impl<B> Send for BufReadDecoder<B>where
B: Send,
impl<B> Sync for BufReadDecoder<B>where
B: Sync,
impl<B> Unpin for BufReadDecoder<B>where
B: Unpin,
impl<B> UnsafeUnpin for BufReadDecoder<B>where
B: UnsafeUnpin,
impl<B> UnwindSafe for BufReadDecoder<B>where
B: 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
Mutably borrows from an owned value. Read more