null_terminated_str/
into_null_terminated_string.rs1use 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}