# windowed-infinity  [](https://crates.io/crates/windowed-infinity) [](https://docs.rs/windowed-infinity) [](https://gitlab.com/chrysn/windowed-infinity)
This crate provides the [WindowedInfinity][__link0] struct and implementations of various traits to
write to it.
Its primary 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][__link1]; a simpler
example is available in the `demo.rs` example.
### Features
The set of traits implemented by [WindowedInfinity][__link2] depends on the configured cargo features:
* With the `std` feature, it implements [std::io::Write][__link3]
* With the `with_serde_cbor` feature, it uses
[serde_cbor][__link4]’s trait unsealing feature to implement its
[Write][__link5] trait.
* Likewise, there are features for ciborium and minicbor. The minicbor version is a bit special
in that there is both a `with_minicbor` / `with_minicbor_0_19` feature.
* Starting at `with_minicbor_0_19`, features carry a version. This allows users of different
minicbor versions to coexist in the same crate, and moreover ensures that the dependencies
expressed in the Cargo.toml files to describe the requirements precisely.
* With the `with_embedded_io_0_4` feature, the Write trait of embedded-io is implemented.
### Crate size
Compared to the original plan of “doing one thing, and doing that right”, this crate has grown
a bit, in that it contains trait implementations for several serializers, and extra mechanism
for combining the own writer with others (from cryptographic digests or CRCs). Both these are
temporary – once there is a 1.0 version of embedded-io, the Tee will be split out into a
dedicated crate (with only compatibility re-exports and constructors / destructors remaining),
and once serializers start using the stable embedded-io, no more writer implementations will
need to be added.
[__cargo_doc2readme_dependencies_info]: ggGkYW0BYXSEG_W_Gn_kaocAGwCcVPfenh7eGy6gYLEwyIe4G6-xw_FwcbpjYXKEGwTue2i4d0MpGxxbRioxGbS9G4Sd3s_CGkQ1Gze1UGUi8GH6YWSBg3F3aW5kb3dlZC1pbmZpbml0eWUwLjEuNnF3aW5kb3dlZF9pbmZpbml0eQ
[__link0]: https://docs.rs/windowed-infinity/0.1.6/windowed_infinity/struct.WindowedInfinity.html
[__link1]: https://tools.ietf.org/html/rfc7959
[__link2]: https://docs.rs/windowed-infinity/0.1.6/windowed_infinity/struct.WindowedInfinity.html
[__link3]: https://doc.rust-lang.org/std/io/trait.Write.html
[__link4]: https://crates.io/crates/serde_cbor
[__link5]: https://docs.rs/serde_cbor/*/serde_cbor/ser/trait.Write.html