In late 2019, I requested to take over the unmaintained time crate for Rust. As anyone that has ever worked with time can attest to, this is no small feat. By December, I had released the first major release in over six years. As a foundational crate in the Rust ecosystem, time is used by a sizable portion of the Rust ecosystem.
The revamped time crate includes extensive documentation and nearly 100% test coverage. The only
unsafe usage is where the compiler requires it to interact with the operating system; all usages
have safety documented. Macros are provided to allow for compile-time verification of certain data,
avoiding unnecessary runtime costs.
During (re)development of the time crate, I frequently found myself writing shims to allow the use
of recently-stabilized APIs on older compilers. However, it was necessary to use
.rem_euclid_shim() instead of
.rem_euclid() to avoid name collisions on newer compilers.
As it may be, it's not too difficult to bring code from Rust's standard library to a third-party
crate, allowing the use on older compilers. By gating and aliasing to
appropriate, it was possible to avoid this. This turns out to be incredibly useful as a standalone
crate; it allows others to use newer APIs with near-zero effort: just a single line of code per file
for most use cases.