Skip to main content

non_empty_str/
cow.rs

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