4 releases
0.1.3 | Sep 22, 2022 |
---|---|
0.1.2 | Sep 22, 2022 |
0.1.1 | Sep 22, 2022 |
0.1.0 | Sep 22, 2022 |
#1812 in Rust patterns
350 downloads per month
105KB
1.5K
SLoC
not_empty
Slices and vectors that are statically guaranteed to be not empty.
This crate is particularly useful for various operations on slices or vectors that would otherwise return an option now return the value with no performance penalty.
Usage
This crate is on crates.io and can be used by adding not_empty
to your dependencies in your project's Cargo.toml
:
[dependencies]
not_empty = "0.1"
Documentation
View the full reference on docs.rs
here.
Features
alloc
enables the use of allocated types through the alloc crate.serde
enables the use of theserde
crate to serialize and deserialize anynot_empty
types.std
enables the use of the standard library.
Note: A compiler error is thrown if both alloc
and std
features are
enabled. Only choose up to one.
Only the std
feature is enabled by default.
Motivation
There are other packages that solve this solution. When searching for my own, I primarily came across two other packages:
nonempty
which only supported vectors and didn't have a solution to working elegantly with iterators. Also, interoperability between its exportedNonEmpty
type and other slices or vectors left much to be desired from an architectural support. To be pedantic, I was jaded that theNonEmpty
type was larger than a standard vector for non-zero sized types.non-empty-vec
did not enlarge the type, which was good, but it did not meet my needs for interoperability as well.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~165KB