null_terminated_str/
into_null_terminated_string.rs

1use std::borrow::Cow;
2
3use super::{const_null_terminated_str, NullTerminatedStr, NullTerminatedString};
4
5pub trait IntoNullTerminatedString<'a> {
6    fn into_null_terminated_string(self) -> Cow<'a, NullTerminatedStr>;
7}
8
9impl<'a> IntoNullTerminatedString<'a> for &'a str {
10    fn into_null_terminated_string(self) -> Cow<'a, NullTerminatedStr> {
11        if self.is_empty() {
12            Cow::Borrowed(const_null_terminated_str!(""))
13        } else {
14            NullTerminatedStr::try_from_str(self)
15                .map(Cow::Borrowed)
16                .unwrap_or_else(|| Cow::Owned(NullTerminatedString::from(self)))
17        }
18    }
19}
20
21impl IntoNullTerminatedString<'static> for String {
22    fn into_null_terminated_string(self) -> Cow<'static, NullTerminatedStr> {
23        Cow::Owned(NullTerminatedString::from(self))
24    }
25}
26
27impl<'a> IntoNullTerminatedString<'a> for &'a NullTerminatedStr {
28    fn into_null_terminated_string(self) -> Cow<'a, NullTerminatedStr> {
29        Cow::Borrowed(self)
30    }
31}
32
33impl<'a> IntoNullTerminatedString<'a> for NullTerminatedString {
34    fn into_null_terminated_string(self) -> Cow<'a, NullTerminatedStr> {
35        Cow::Owned(self)
36    }
37}