1 unstable release
0.3.0 | Sep 2, 2020 |
---|---|
0.2.0 |
|
0.1.0 |
|
0.0.1 |
|
#223 in Parser tooling
23KB
380 lines
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
push
andpop
methods, 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
:first
first_mut
last
last_mut
split_first
split_last
split_first_mut
split_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
:
[dependencies]
oom = "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.