windowed-infinity

Crates.iowindowed-infinity
lib.rswindowed-infinity
version0.2.0
created_at2019-01-22 23:14:54.61702+00
updated_at2025-10-09 15:55:35.853748+00
descriptionA 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.
homepage
repositoryhttps://codeberg.org/chrysn/windowed-infinity
max_upload_size
id110096
size18,018
(chrysn)

documentation

https://docs.rs/windowed-infinity/

README

windowed-infinity License: MIT OR Apache-2.0 windowed-infinity on crates.io windowed-infinity on docs.rs Source Code Repository Rust Version: 1.82.0

This crate provides the WindowedInfinity struct, which is written to through its methods or embedded_io::Write.

Its purpose is to wrap a small buffer such that writes to it advance a cursor over a larger imaginary buffer, only persisting writes to the small buffer. After the buffer has been processed, a new WindowedInfinity can be set up and the writing process repeated. This is wasteful when the writes are computationally expensive, but convenient when operations only rarely exceed the buffer.

A typical practical example of a WindowedInfinity application is the implementation of CoAP block-wise transfer according to RFC7959; a simpler example is available in the demo.rs example.

Related crates

This crate provides the bare minimum functionality of Doing One Thing (hopefully) Right. Before adopting embedded_io::Write as The Interface to this crate, it used to provide a Tee adapter (now in tee-embedded-io) as well as implementing other Write traits or providing a compatible implementation into hashes and CRCs (now in extra-embedded-io-adapters). Those crates can be combined, for example, to build a combined writer that hashes its text input while preserving only a small portion in memory, thus allowing checked recombination of the parts (e.g. to provide an ETag value in CoAP block-wise transfer).

Commit count: 0

cargo fmt