windowed-infinity 0.2.0

A data structure representing an infinite sequentially writable u8 vector of which a small view has writes to it preserved. This is primarily useful when implementing CoAP block-wise transfers, and also convenient for logging on constrained devices.
Documentation
use extra_embedded_io_adapters::WritableDigest;
use sha2::Digest;
use windowed_infinity::WindowedInfinity;

fn write_to(w: &mut impl core::fmt::Write) {
    w.write_str("Lorem ipsum dolor sit amet.").unwrap();
}

fn main() {
    let mut data = [0u8; 20];
    let mut writer = tee_embedded_io::Tee::new(
        WindowedInfinity::new(&mut data, 0),
        WritableDigest(sha2::Sha256::new()),
    );
    write_to(&mut embedded_io_adapters::fmt::ToFmt::new(&mut writer));
    let (writer, WritableDigest(etag)) = writer.into_parts();
    println!(
        "First chunk is: {:?}, total sha256 {:x}",
        std::str::from_utf8(writer.written()),
        etag.finalize()
    );

    let mut writer = tee_embedded_io::Tee::new(
        WindowedInfinity::new(&mut data, -20),
        WritableDigest(sha2::Sha256::new()),
    );
    write_to(&mut embedded_io_adapters::fmt::ToFmt::new(&mut writer));
    let (writer, WritableDigest(etag)) = writer.into_parts();
    println!(
        "Second chunk is: {:?}, total sha256 {:x}",
        std::str::from_utf8(writer.written()),
        etag.finalize(),
    );
}