1use std::fmt;
2
3mod vec;
8mod slice;
9mod string;
10mod vecdeque;
11
12pub use vec::NonEmptyVec;
17pub use slice::{NonEmptySliceRef, NonEmptySliceRefMut};
18pub use string::{NonEmptyString, NonEmptyStr};
19pub use vecdeque::NonEmptyVecDeque;
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27pub struct EmptyError;
28
29impl fmt::Display for EmptyError {
30 #[inline]
31 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32 write!(f, "cannot create non-empty collection from empty input")
33 }
34}
35
36impl std::error::Error for EmptyError {}
37
38#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_empty_error_display() {
48 let err = EmptyError;
49 assert_eq!(
50 err.to_string(),
51 "cannot create non-empty collection from empty input"
52 );
53 }
54
55 #[test]
56 fn test_nonempty_vec_to_slice_ref() {
57 let nev = NonEmptyVec::new(1, vec![2, 3]);
58 let slice_ref = NonEmptySliceRef::new(nev.as_slice()).unwrap();
59 assert_eq!(slice_ref.len(), 3);
60 assert_eq!(slice_ref.first(), &1);
61 }
62
63 #[test]
64 fn test_nonempty_vec_to_slice_ref_mut() {
65 let mut nev = NonEmptyVec::new(1, vec![2, 3]);
66 let slice_ref_mut = NonEmptySliceRefMut::new(nev.as_mut_slice()).unwrap();
67 assert_eq!(slice_ref_mut.len(), 3);
68 assert_eq!(slice_ref_mut.first(), &1);
69 }
70}