#[inline]
pub fn starts_with_ignore_ascii_case(value: &str, prefix: &str) -> bool {
value
.as_bytes()
.get(..prefix.len())
.is_some_and(|head| head.eq_ignore_ascii_case(prefix.as_bytes()))
}
#[inline]
pub fn contains_ignore_ascii_case(value: &str, needle: &str) -> bool {
contains_bytes_ignore_ascii_case(value, needle.as_bytes())
}
#[inline]
pub fn contains_bytes_ignore_ascii_case(value: &str, needle: &[u8]) -> bool {
if needle.is_empty() {
return true;
}
value
.as_bytes()
.windows(needle.len())
.any(|window| window.eq_ignore_ascii_case(needle))
}
#[inline]
pub fn ends_with_ignore_ascii_case(bytes: &[u8], suffix: &[u8]) -> bool {
bytes
.get(bytes.len().saturating_sub(suffix.len())..)
.is_some_and(|tail| tail.eq_ignore_ascii_case(suffix))
}
#[inline]
pub fn is_ascii_alphanumeric_str(value: &str) -> bool {
is_ascii_alphanumeric_bytes(value.as_bytes())
}
#[inline]
pub fn is_ascii_alphanumeric_bytes(bytes: &[u8]) -> bool {
bytes.iter().all(|byte| byte.is_ascii_alphanumeric())
}