9 releases (5 breaking)
0.8.0 | Jul 20, 2022 |
---|---|
0.7.1 | Jun 2, 2022 |
0.7.0 | May 5, 2022 |
0.6.0 | Mar 18, 2022 |
0.1.0 | Oct 9, 2020 |
#6 in #dupe
8,458 downloads per month
Used in 4 crates
(via gazebo)
42KB
821 lines
Gazebo - a library of Rust utilities
This library contains a collection of well-tested utilities. Most modules stand alone, but taking a few representative examples:
gazebo::prelude::*
is intended to be imported as such, and provides extension traits to common types. For example, it providesVec::map
which is equivalent toiter().map(f).collect::<Vec<_>>()
, andstr::split1
likesplit
but which only splits once. We hope some of these functions one day make it into the Rust standard library.gazebo::dupe
provides the traitDupe
with the memberdupe
, all of which are exactly likeClone
. The difference is thatDupe
should not be implemented for types that reallocate or have expensiveclone
operations - e.g. there isDupe
forArc
andusize
, but not forString
andVec
. By usingdupe
it is easy to focus on theclone
calls (which should be rare) and ignore things whose cost is minimal.gazebo::cell::ARef
provides a type which is either aRef<T>
or a direct reference&T
, with operations that make it look likeRef
-- allowing you to uniformly convert a reference into something like aRef
.gazebo::any::AnyLifetime
provides a trait likeAny
, but which does not require'static
lifetimes, at the cost of more boilerplate.
The functionality provided by Gazebo is not stable, and continues to evolve with both additions (as we find new useful features) and removals (as we find better patterns or libraries encapsulating the ideas better). While the code varies in usefulness and design quality, it is all well tested and documented.
Using Gazebo
Gazebo can be depended upon by adding gazebo
to your [dependencies]
, using the standard Cargo patterns.
The two interesting directories in this repo are gazebo
(which contains the source to Gazebo itself) and gazebo_derive
(which contains support for #[derive(Dupe)]
and other Gazebo traits). Usually you will directly import gazebo
, but gazebo_derive
is a required transitive dependency if you are sourcing the library from GitHub.
Learn More
You can learn more about Gazebo in this introductory video, or from the following blog posts:
- Rust Nibbles - Gazebo: Prelude
- Rust Nibbles - Gazebo: Dupe
- Rust Nibbles - Gazebo: Variants
- Rust Nibbles - Gazebo: AnyLifetime
- Rust Nibbles - Gazebo: Comparisons
- Rust Nibbles - Gazebo: Casts and Transmute
- Rust Nibbles - Gazebo: The rest of the tent
Making a release
- Check the GitHub Actions are green.
- Update
CHANGELOG.md
with the changes since the last release. This link can help (update to compare against the last release). - Update the version numbers of the two
Cargo.toml
files. Bump them by 0.0.1 if there are no incompatible changes, or 0.1.0 if there are. Bump the dependency ingazebo
to point at the latestgazebo_derive
version. - Copy the files
CHANGELOG.md
, the twoLICENSE-
files andREADME.md
into eachgazebo
andgazebo_derive
subdirectory. - Run
cargo publish --allow-dirty --dry-run
, then without the--dry-run
, first ingazebo_derive
and thengazebo
directories. - Create a GitHub release with
v0.X.Y
, using thegazebo
version as the name.
License
Gazebo is both MIT and Apache License, Version 2.0 licensed, as found in the LICENSE-MIT and LICENSE-APACHE files.
Dependencies
~1.5MB
~36K SLoC