8 releases
0.1.7 | Oct 30, 2024 |
---|---|
0.1.6 | Oct 30, 2024 |
0.1.5 | Sep 10, 2024 |
0.1.4 | Feb 1, 2023 |
0.1.0 | Jan 22, 2019 |
#246 in No standard library
2,327 downloads per month
Used in 5 crates
(via coap-handler-implementati…)
34KB
508 lines
windowed-infinity
This crate provides the WindowedInfinity 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; a simpler
example is available in the demo.rs
example.
Features
The set of traits implemented by WindowedInfinity depends on the configured cargo features:
- With the
std
feature, it implementsstd::io::Write
- With the
with_serde_cbor
feature, it usesserde_cbor
’s trait unsealing feature to implement itsWrite
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
,_0_6
and_async_0_6
features, the Write trait ofembedded-io
/-async
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.
Dependencies
~400–750KB
~17K SLoC