13 releases
new 0.2.3 | Mar 9, 2025 |
---|---|
0.2.2 | Mar 9, 2025 |
0.1.4 | Mar 9, 2025 |
0.0.6 | Mar 8, 2025 |
0.0.4 | Feb 8, 2025 |
#837 in Data structures
2,052 downloads per month
24KB
436 lines
Non-Empty Containers
A simple set of non-empty alternatives to standard containers in Rust, including NonEmptyVec
.
Getting Started
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();
Automatically Deriving Arbitrary
All 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>);
Dependencies
~0–370KB