non_empty_slice/
ownership.rs

1#[cfg(not(feature = "ownership"))]
2compile_error!("expected `ownership` to be enabled");
3
4#[cfg(any(feature = "std", feature = "alloc"))]
5use ownership::IntoOwned;
6
7#[cfg(any(feature = "std", feature = "alloc"))]
8use crate::{boxed::NonEmptyBoxedSlice, vec::NonEmptyVec};
9
10#[cfg(any(feature = "std", feature = "alloc"))]
11impl<T: IntoOwned> IntoOwned for NonEmptyVec<T> {
12    type Owned = NonEmptyVec<T::Owned>;
13
14    fn into_owned(self) -> Self::Owned {
15        // SAFETY: `into_owned` can not make the vector empty
16        unsafe { Self::Owned::new_unchecked(self.into_vec().into_owned()) }
17    }
18}
19
20#[cfg(any(feature = "std", feature = "alloc"))]
21impl<T: IntoOwned> IntoOwned for NonEmptyBoxedSlice<T> {
22    type Owned = NonEmptyBoxedSlice<T::Owned>;
23
24    fn into_owned(self) -> Self::Owned {
25        self.into_non_empty_vec()
26            .into_owned()
27            .into_non_empty_boxed_slice()
28    }
29}