# not_empty Slices and vectors that are statically guaranteed to be not empty. [![Build Status]][actions] [![Latest Version]][crates.io] 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. [Build Status]: https://img.shields.io/github/workflow/status/seancroach/not_empty/ci?logo=github [actions]: https://github.com/seancroach/not_empty/actions/workflows/ci.yml [Latest Version]: https://img.shields.io/crates/v/not_empty?logo=rust [crates.io]: https://crates.io/crates/not_empty ## Usage This crate is [on crates.io][crates] and can be used by adding `not_empty` to your dependencies in your project's `Cargo.toml`: ```toml [dependencies] not_empty = "0.1" ``` [crates]: https://crates.io/crates/not_empty ## Documentation View the full reference on `docs.rs` [here](https://docs.rs/not_empty). ## Features - `alloc` enables the use of allocated types through the alloc crate. - `serde` enables the use of the `serde` crate to serialize and deserialize any `not_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 exported `NonEmpty` type and other slices or vectors left much to be desired from an architectural support. To be pedantic, I was jaded that the `NonEmpty` 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. [`nonempty`]: https://docs.rs/nonempty [`non-empty-vec`]: https://docs.rs/non-empty-vec ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) - MIT license ([LICENSE-MIT](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.