pub struct NonEmptySlice<'a, T> { /* private fields */ }Expand description
A borrowed slice guaranteed to contain at least one element.
The borrowed counterpart to NonEmptyVec: parse once via
NonEmptySlice::from_slice, then NonEmptySlice::first is
infallible. Avoids cloning large payloads (e.g. LLM choices arrays)
while still removing validate-then-index (is_empty + [0]) sites.
use vtcode_commons::validation::NonEmptySlice;
let values = vec![10, 20];
let parsed = NonEmptySlice::from_slice(&values).expect("non-empty");
assert_eq!(parsed.first(), &10);
assert!(NonEmptySlice::<i32>::from_slice(&[]).is_none());Implementations§
Source§impl<'a, T> NonEmptySlice<'a, T>
impl<'a, T> NonEmptySlice<'a, T>
Sourcepub fn from_slice(slice: &'a [T]) -> Option<Self>
pub fn from_slice(slice: &'a [T]) -> Option<Self>
Parse a slice into a non-empty view, returning None when empty.
This is the single boundary where the invariant is established.
Sourcepub const fn first(&self) -> &'a T
pub const fn first(&self) -> &'a T
Infallible access to the first element; no Option to re-check.
Sourcepub const fn is_empty(&self) -> bool
pub const fn is_empty(&self) -> bool
Always returns false; provided for generic len/is_empty pairing.
Trait Implementations§
Source§impl<'a, T: Clone> Clone for NonEmptySlice<'a, T>
impl<'a, T: Clone> Clone for NonEmptySlice<'a, T>
impl<'a, T: Copy> Copy for NonEmptySlice<'a, T>
Source§impl<'a, T: Debug> Debug for NonEmptySlice<'a, T>
impl<'a, T: Debug> Debug for NonEmptySlice<'a, T>
impl<'a, T: Eq> Eq for NonEmptySlice<'a, T>
Source§impl<'a, T: PartialEq> PartialEq for NonEmptySlice<'a, T>
impl<'a, T: PartialEq> PartialEq for NonEmptySlice<'a, T>
impl<'a, T: PartialEq> StructuralPartialEq for NonEmptySlice<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for NonEmptySlice<'a, T>
impl<'a, T> RefUnwindSafe for NonEmptySlice<'a, T>
impl<'a, T> Send for NonEmptySlice<'a, T>
impl<'a, T> Sync for NonEmptySlice<'a, T>
impl<'a, T> Unpin for NonEmptySlice<'a, T>
impl<'a, T> UnsafeUnpin for NonEmptySlice<'a, T>
impl<'a, T> UnwindSafe for NonEmptySlice<'a, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.