non_empty_str/
cow.rs

1//! Non-empty [`Cow<'_, str>`](Cow).
2
3#[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
14/// Represents non-empty clone-on-write strings, [`Cow<'_, NonEmptyStr>`](Cow).
15pub 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}