1#[cfg(not(any(feature = "std", feature = "alloc")))]
4compile_error!("expected either `std` or `alloc` to be enabled");
5
6#[cfg(feature = "std")]
7use std::borrow::Cow;
8
9#[cfg(all(not(feature = "std"), feature = "alloc"))]
10use alloc::borrow::Cow;
11
12use crate::{boxed::NonEmptyBoxedStr, str::NonEmptyStr, string::NonEmptyString};
13
14pub type NonEmptyCowStr<'s> = Cow<'s, NonEmptyStr>;
16
17impl From<NonEmptyCowStr<'_>> for NonEmptyString {
18 fn from(non_empty: NonEmptyCowStr<'_>) -> Self {
19 non_empty.into_owned()
20 }
21}
22
23impl From<NonEmptyCowStr<'_>> for NonEmptyBoxedStr {
24 fn from(non_empty: NonEmptyCowStr<'_>) -> Self {
25 non_empty.into_owned().into_non_empty_boxed_str()
26 }
27}
28
29impl<'s> From<&'s NonEmptyStr> for NonEmptyCowStr<'s> {
30 fn from(non_empty: &'s NonEmptyStr) -> Self {
31 Self::Borrowed(non_empty)
32 }
33}
34
35impl From<NonEmptyString> for NonEmptyCowStr<'_> {
36 fn from(non_empty: NonEmptyString) -> Self {
37 Self::Owned(non_empty)
38 }
39}
40
41impl<'s> From<&'s NonEmptyString> for NonEmptyCowStr<'s> {
42 fn from(non_empty: &'s NonEmptyString) -> Self {
43 Self::Borrowed(non_empty.as_non_empty_str())
44 }
45}