oom - One Or Many slice types
Took inspirations from the "Parse, don’t validate" article.
This package defines three types: NonEmptySlice, NonEmptyMutSlice
and NonEmptyVec. Those types don't implement Deref or DerefMut trait,
it is intentional to avoid confusion when resolving methods.
If you want &[T], consider using as_slice or as_mut_slice methods.
NonEmptySlice and NonEmptyMutSlice:
- are borrow types (not owned type).
- are counterparts of
&[T]and&mut [T]. - have same size and similar niche as
&[T] - cannot be used without borrow contents from array, slice or
Vec.
NonEmptyVec:
- is an owned types, counterparts of
Vec<T>. - doesn't have
pushandpopmethods, because those are fallible operations. I had to deal with unsafe codes that I am not confident if I want to implement them.
The differences from &[T] and Vec<T>:
.len()returns std'sNonZeroUsize..is_empty()is always false.- These methods don't return
None:firstfirst_mutlastlast_mutsplit_firstsplit_lastsplit_first_mutsplit_last_mut
Notable features
#![no_std]- no external dependencies
- no macros
- instant build time.
Supported Rust versions
Latest stable. I use the new conditional flows in const fn available only in Rust v1.46.0.
Usage
Add this to your Cargo.toml:
[]
= "0.3.0"
Or assuming you installed cargo-edit, use:
cargo add oom
Thanks for inspirations from
- https://github.com/cloudhead/nonempty (MIT license)
- https://github.com/yihuang/non-empty-vec (MIT license)
License
All the code in this repository is released under the MIT License, for more information read the COPYRIGHT file.