const PATH_SEPARATORS: [char; 2] = ['/', '\\'];
pub(crate) fn path_basename(path: &str) -> &str {
path.rsplit(PATH_SEPARATORS).next().unwrap_or(path) }
pub(crate) fn path_basename_bytes(path: &[u8]) -> &[u8] {
path.iter()
.rposition(|&byte| byte == b'/' || byte == b'\\')
.map(|index| &path[index + 1..])
.unwrap_or(path) }
pub(crate) fn path_component_matches(path: &str, predicate: impl FnMut(&str) -> bool) -> bool {
path.split(PATH_SEPARATORS).any(predicate)
}
pub(crate) fn path_has_any_component<T: AsRef<str>>(path: &str, components: &[T]) -> bool {
path_component_matches(path, |part| {
components
.iter()
.any(|component| part.eq_ignore_ascii_case(component.as_ref()))
})
}