use alloc::borrow::Cow;
use crate::{IsAsciiLowercased, IsLowercased};
pub trait ToLowercase<'a> {
fn to_lowercase_cow(self) -> Cow<'a, str>;
fn to_ascii_lowercase_cow(self) -> Cow<'a, str>;
}
impl<'a> ToLowercase<'a> for &'a str {
#[inline]
fn to_lowercase_cow(self) -> Cow<'a, str> {
if self.is_lowercased() {
Cow::Borrowed(self)
} else {
Cow::Owned(self.to_lowercase())
}
}
#[inline]
fn to_ascii_lowercase_cow(self) -> Cow<'a, str> {
if self.is_ascii_lowercased() {
Cow::Borrowed(self)
} else {
Cow::Owned(self.to_ascii_lowercase())
}
}
}
impl<'a> ToLowercase<'a> for Cow<'a, str> {
#[inline]
fn to_lowercase_cow(self) -> Cow<'a, str> {
match self {
Cow::Borrowed(s) => s.to_lowercase_cow(),
Cow::Owned(s) => Cow::Owned(cow_into_owned!(s, s.as_str().to_lowercase_cow())),
}
}
#[inline]
fn to_ascii_lowercase_cow(self) -> Cow<'a, str> {
match self {
Cow::Borrowed(s) => s.to_ascii_lowercase_cow(),
Cow::Owned(s) => Cow::Owned(cow_into_owned!(s, s.as_str().to_ascii_lowercase_cow(),)),
}
}
}