Crate of the Week

I'm suggesting my crate prae. It provides a convenient macro that generates a type with automatic validation, which you otherwise would do using the newtype pattern and implementing getters and setters yourself. It also allows you to create types that inherit validation of other types. It provides an integration with serde, which enables validation during deserialization, making it especially useful for web-related work, for example.

1 Like

Suggestion: cfb - Rust library for reading/writing Compound File Binary (structured storage) files.

This provides a filesystem-in-a-file and is super useful when you need random access to data on disk but want to avoid a database.

1 Like
(Obviously there's many ways this trait can be implemented)


Shouldn't RussianWarship::go_fuck_yourself() take self as a parameter? Are you accepting pull requests?


I really think you should use generics. Your trait should apply to all warships.

1 Like

Moderator note: If you want to discuss the implementation details of a crate, don't do it in the CotW thread. A project-specific issue tracker is better for that.

Also, are you sure this is in good taste? If you want TWiR to link to the Ukrainian government asking for donations, you could just ask. Hijacking CotW probably isn’t necessary, and if you don’t follow the link to the crate, it just looks like you’re making light of the conflict.


This is an outrageous thing to say to strangers without knowing any personal details. Over a million people have been forced to evacuate and the number of people affected by an unprovoked war that is descending into civilian massacre is only going to increase. It is by no means "making light" to direct the occasional tasteful vulgarity at a mass murderer, especially one that commemorates a moment of bravery and defiance in the face of crushing opposition.

Sorry for the double-post.

Edit: Considering that this is a forum for Rust users and that this phrase has been repeated all over the world for a week, I think the audience on this forum will expect the punchline to be something in the crate. Since the comment mentions it's a trait, it seems obvious that the punchline will be a method on that trait.

It is inappropriate to throw a show of solidarity (one that is being repeated around the world) back into someone's face by saying that using the words "russian warship" are "making light of the conflict". Any reasonable person would expect a reader to know where the sentence is going when it starts with "russian warship". This is patently absurd, self-righteous pearl clutching. I would normally not engage publicly but it is an abuse of moderator authority to deride the comment in this way and it should be addressed.

The first comment, followed by the one from @stonerfish, made this a perfect community moment. That comment in particular established a sentiment of compassion and friendship. It would have been appropriate (and, in a way, contributory to that moment) to have simply commented with the moderator note and without the attack that followed.


I think you misunderstood. "if you don’t follow the link to the crate, it just looks like you’re making light of the conflict." notes that if you don't click on the link, you don't see the vulgar name of the function, only the name "russian_warship" which may be confusing, misleading, or seem insensitive.

Anyways, yes, this is the CoTW thread. Maybe a new thread would be good if there's more to say.


I’d like to propose my crate third-wheel. It’s a TLS man-in-the-middle proxy allowing you to intercept and modify https traffic.

It’s built on top of hyper and is tested against chrome and Firefox.


jsonpath_lib: Implements a convenient query language for JSON, used by Rust for testing the rustdoc_json experimental backend.


I'm suggesting my crate drpc - Correct, high performance, robust, easy use Remote invocation framework

  • based T-L-V.for example: [Tag][Length][Value]
  • support Custom Serialization crate. for example: bincode,json,bson...any serde Serialization
  • support Load Balance.(Round/Random/Hash/MinConnect)
  • support Custom registry, microservices. see redis_registry
  • support tokio,this is async/await crate
  • high performance, Accept/Response only serialize the once and deserialization once. double of performance(qps) as fast as Tarpc (Google) with one server/one client
1 Like

I'd like to suggest heph if it hasn't been shared before.

I think the whole approach to actors with recovery is really neat as it's based around simple async fns, rather than entire async traits. It's early on, but very well documented!


I'd like to suggest the aliri family of crates, in particular aliri_actix, aliri_tower, and aliri_tokens.

aliri_tower and aliri_actix and provide a simple mechanism to plug JWT authentication and OAuth2 scopes authorization into your favorite web service project, whether axum, actix-web, or any other server that can use tower-http middleware.

aliri_tokens provides a means for a client using OAuth2 client credentials or refresh tokens to reliably and robustly renew those tokens in the background without impacting the latency of outgoing requests. This functionality will soon be expanded to support injecting authorization tokens using reqwest-middleware, a great crate in its own right.

These projects build on the functionality of aliri_oauth2 and the base JOSE implementation crate, aliri. They are maintained by the same author of the aliri_braid (a crate to combat stringly-typed interfaces) and aliri_base64 (a crate to make working with base64 encoded buffers friendlier) crates.

I wrote new unit/dimension support library.
Please check it out.

I'd like to nominate hash_hasher, a library for handling hash tables and hash sets when your keys are already hashes (for instance, cryptographic hashes). This avoids spending time competing the hash of a hash.

1 Like

Hi! I am the maintainer of async-stripe (rust bindings for the stripe api) which I think is ready for prime-time after a good year of on-and-off work.

We just released 0.14 this week which comes with a host of changes and we're reaching a stable API.


My bet crate (for "bynary expression tree") was noticed by nobody, maybe because it's a little abstract, but it could probably get more use.
It allowed me to implement query languages in a few dozens lines in several applications, for example queries like this one in lfs:

lfs -f 'size>2TB'


lfs -f '(disk=ssd | type=xfs) & free < 2.5G'

(it's also behind the fast queries in rhit and broot)


I submit my own new crate, impl-tools:

  • a variant on our beloved #[derive(Trait)] supporting where bounds, using and ignore
  • derive trait on definition for reference types
  • impl Self syntax to avoid repeated generics
  • implement Default on a struct using field initializers
  • extensible (but third-party macros cannot be extended in the same way as #[derive])

Status is barebones (only supports Clone, Debug, Default, Deref, DerefMut traits) but tested.

Hey! I'd like to nominate git-drive a nice CLI tool written by my friend and colleague knutwalker who helped me a lot getting started with Rust :slight_smile:

The tool is especially useful for teams who pair a lot and want to use the Co-Authored-By feature to give credit to everyone involved in a commit.

It's as simple as:

git drive with alice


➜ git drive
  Select any number navigator(s)
  Use [space] to select, [return] to confirm
❯ [✔] alice
  [ ] bob

and the corresponding Co-Authored-By lines are added to your commit message template.

Nice change. Much wow.

Co-Authored-By: Alice <>

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

Hacking alone? Simple:

git drive alone

I hope you guys like it as much as me and my team does :slight_smile:


I would like to self-nominate my crate num-order. It just reached version 1.0!

This crate is used to support numerically consistent ordering and hashing on various fundamental numeric types (including integers, floats, rational and complex numbers, etc.). This enables the comparing between different numeric types, which might be useful for implementing uniform numeric type and other applications.

Please see the readme for examples! Thank you :grin:

1 Like