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