Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/facebookincubator/gazebo
A Rust library containing a collection of small well-tested primitives.
https://github.com/facebookincubator/gazebo
Last synced: 22 days ago
JSON representation
A Rust library containing a collection of small well-tested primitives.
- Host: GitHub
- URL: https://github.com/facebookincubator/gazebo
- Owner: facebookincubator
- License: apache-2.0
- Created: 2020-10-01T08:23:10.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-04-08T22:27:48.000Z (8 months ago)
- Last Synced: 2024-04-08T23:41:31.660Z (8 months ago)
- Language: Rust
- Homepage:
- Size: 285 KB
- Stars: 210
- Watchers: 28
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-buck2 - Gazebo - tested primitives. (Projects)
README
# Gazebo - a library of Rust utilities
[![Support Ukraine](https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB)](https://opensource.fb.com/support-ukraine)
[![GitHub link](https://img.shields.io/badge/GitHub-facebookincubator%2Fgazebo-blue.svg)](https://github.com/facebookincubator/gazebo)
[![crates.io version](https://img.shields.io/crates/v/gazebo.svg)](https://crates.io/crates/gazebo)
[![docs.rs availability](https://img.shields.io/docsrs/gazebo?label=docs.rs)](https://docs.rs/gazebo/)
[![Build status](https://img.shields.io/github/workflow/status/facebookincubator/gazebo/ci.svg)](https://github.com/facebookincubator/gazebo/actions)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 provides `Vec::map` which is
equivalent to `iter().map(f).collect::>()`, and `str::split1` like
`split` but which only splits once. We hope some of these functions one day
make it into the Rust standard library.
- `gazebo::dupe` provides the trait `Dupe` with the member `dupe`, all of which
are exactly like `Clone`. The difference is that `Dupe` should not be
implemented for types that reallocate or have expensive `clone` operations -
e.g. there is `Dupe` for `Arc` and `usize`, but not for `String` and `Vec`. By
using `dupe` it is easy to focus on the `clone` calls (which should be rare)
and ignore things whose cost is minimal.
- `gazebo::cell::ARef` provides a type which is either a `Ref` or a direct
reference `&T`, with operations that make it look like `Ref` -- allowing you
to uniformly convert a reference into something like a `Ref`.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](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html).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](https://www.youtube.com/watch?v=pQJkx9HL_04), or from
the following blog posts:- [Rust Nibbles - Gazebo: Prelude](https://developers.facebook.com/blog/post/2021/06/29/rust-nibbles-gazebo-prelude/)
- [Rust Nibbles - Gazebo: Dupe](https://developers.facebook.com/blog/post/2021/07/06/rust-nibbles-gazebo-dupe/)
- [Rust Nibbles - Gazebo: Variants](https://developers.facebook.com/blog/post/2021/07/13/rust-nibbles-gazebo-variants)
- [Rust Nibbles - Gazebo: AnyLifetime](https://developers.facebook.com/blog/post/2021/07/20/rust-nibbles-gazebo-any-lifetime/)
- [Rust Nibbles - Gazebo: Comparisons](https://developers.facebook.com/blog/post/2021/07/27/rust-nibbles-gazebo-comparisons/)
- [Rust Nibbles - Gazebo: Casts and Transmute](https://developers.facebook.com/blog/post/2021/08/03/rust-nibbles-gazebo-casts-transmute/)
- [Rust Nibbles - Gazebo: The rest of the tent](https://developers.facebook.com/blog/post/2021/08/10/rust-nibbles-gazebo-rest-of-tent/)## Making a release
1. Check the
[GitHub Actions](https://github.com/facebookincubator/gazebo/actions) are
green.
2. Update `CHANGELOG.md` with the changes since the last release.
[This link](https://github.com/facebookincubator/gazebo/compare/v0.1.0...main)
can help (update to compare against the last release).
3. 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 in `gazebo` to point at the latest `gazebo_derive` version.
4. Copy the files `CHANGELOG.md`, the two `LICENSE-` files and `README.md` into
each `gazebo` and `gazebo_derive` subdirectory.
5. Run `cargo publish --allow-dirty --dry-run`, then without the `--dry-run`,
first in `gazebo_derive` and then `gazebo` directories.
6. Create a
[GitHub release](https://github.com/facebookincubator/gazebo/releases/new)
with `v0.X.Y`, using the `gazebo` version as the name.## License
Gazebo is both MIT and Apache License, Version 2.0 licensed, as found in the
[LICENSE-MIT](LICENSE-MIT) and [LICENSE-APACHE](LICENSE-APACHE) files.