| Crates.io | nonempty-containers |
| lib.rs | nonempty-containers |
| version | 0.2.3 |
| created_at | 2025-02-07 15:08:10.433888+00 |
| updated_at | 2025-03-09 13:59:42.215999+00 |
| description | Fast, zero-cost conversion, and fully inter-operable nonempty container types. |
| homepage | |
| repository | https://github.com/Funky-Farm/nonempty-containers |
| max_upload_size | |
| id | 1547042 |
| size | 28,698 |
A simple set of non-empty alternatives to standard containers in Rust, including NonEmptyVec.
Add this to your Cargo.toml:
# Cargo.toml
[dependencies]
nonempty-containers = "0.0.3"
The non-empty containers behave like their standard counterparts:
use nonempty_containers::NonEmptyVec;
let nev = NonEmptyVec::new(42, vec![1]);
nev.push(2);
nev.pop();
nev.pop();
assert_eq!(nev, NonEmptyVec::singleton(42));
// Errors!
nev.pop();
ArbitraryAll non-empty containers can automatically derive Arbitrary, so long as the contained type
also implements Arbitrary. This is useful for property-based testing, such as with arbtest.
# Cargo.toml
[dependencies]
nonempty-containers = { version = "0.0.2", features = ["arbitrary"] }
And then you can simply add #[derive(Arbitrary)] annotations to your types:
// pixels.rs
use arbitrary::Arbitrary;
#[derive(Arbitrary)]
pub struct Items(NonEmptyVec<u32>);