tokio-netem provides a toolbox of Tokio AsyncRead /AsyncWrite adapters that let you emulate latency, throttling, slicing, terminations, forced shutdowns, data injections and data corruption without touching your application code. Compose them around TcpStream (or any Tokio I/O type) to run realistic integration tests and chaos experiments.
let mut stream = TcpStream::connect("localhost:80")
.await?
.throttle_writes(32 * 1024) // 32 KB/s`
.slice_writes(16); // flush writes every 16B
I'd like to promote disjoint_impls as a crate of the week.
Crate fully resolves this longstanding Rust issue and enables writing non-overlapping (disjoint) impls distinguished by a set of associated types (no special syntax required):
disjoint_impls! {
pub trait MyTrait {}
impl<T: Dispatch<Group = u32>> MyTrait for T {}
impl<T: Dispatch<Group = i32>> MyTrait for T {}
}
I would like to self-nominate rust_readability, a package that can assess the complexity of texts using a variety of well-established readability formulas.
The package includes implementations of the Lix, Rix, Flesch-Kincaid, and Automated Readability Index methods, among others, and can handle both files and strings.
I want to nominate mitsein, which is a crate that provides non-empty collections.
It has both the generic NonEmpty<T> wrapper as well as aliases like Vec1.
It has macros for constructing non-empty collections.
It supports more collections than any other non-empty crate I could find. It has feature flags for popular crates like serde, schemars, smallvec, itertools and others. I've been looking for a crate like this for a really long time, and I finally found it.
The author is also really active, the library is very well documented, and there are constant commits to it. When asking questions in his issue tracker, he gives long thought-out responses and takes lots of care. I want it to be featured in crate of the week!
I've been doing some work at work with resilience4j on some Java projects, and some unrelated stuff with various REST API clients in Rust. I wanted some of the tools that r4j has and building a tower crate to handle it has been a fun project, so I'm self-nominating my new crate:
Interested folks can read more here. Rust is allowing us to move fast in development and be hundreds (or even thousands) times faster than comparable tools:
I would like to self-nominate asyncapi-rust which generates AsyncApi specs for WebSockets or other async protocols, similar to how utoipa does for REST apis.
GuardianDB - A high-performance, decentralized database built on IPFS with advanced P2P networking, access control, and real-time synchronization capabilities - More details here
Self nomination for grapheme-utils, a very forgiving batch of ergonomic functions that make working with graphemes much easier. Given a byte index, or grapheme index, get the current, previous, or next grapheme, printed string width, etc.