async-utf8-decoder 0.1.0

Convert AsyncRead to incremental UTF8 string stream
Documentation

rs-async-utf8-decoder

Audit Build Test

Incremental UTF8 decoder which convert AsyncRead into Stream of futures-rs.

Example

use async_std::io::Cursor;
use async_utf8_decoder::Utf8Decoder;

let cur = Cursor::new(Vec::new());
let mut decoder = Utf8Decoder::new(cur);

async fn append(cursor: &mut Cursor<Vec<u8>>, data: &[u8]) -> Result<()> {
    let p = cursor.position();
    cursor.set_position(cursor.get_ref().len() as u64);
    cursor.write(data).await?;
    cursor.set_position(p);
    Ok(())
}

// Decode full
append(decoder.get_mut(), &vec![240, 159, 146, 150]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("💖", decoded);

// Decode half
append(decoder.get_mut(), &vec![240, 159]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("", decoded);
append(decoder.get_mut(), &vec![146, 150]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("💖", decoded);

// Decode char
append(decoder.get_mut(), &vec![240]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("", decoded);
append(decoder.get_mut(), &vec![159]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("", decoded);
append(decoder.get_mut(), &vec![146]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("", decoded);
append(decoder.get_mut(), &vec![150]).await?;
let decoded = decoder.next().await.unwrap()?;
assert_eq!("💖", decoded);

License

The code follows MIT license written in LICENSE. Contributors need to agree that any modifications sent in this repository follow the license.