use std::path::Path; /// Check if given path has extension which in the given vector. pub fn has_executable_extension, S: AsRef>(path: T, pathext: &[S]) -> bool { let ext = path.as_ref().extension().and_then(|e| e.to_str()); match ext { Some(ext) => pathext .iter() .any(|e| ext.eq_ignore_ascii_case(&e.as_ref()[1..])), _ => false, } } #[cfg(test)] mod test { use super::*; use std::path::PathBuf; #[test] fn test_extension_in_extension_vector() { // Case insensitive assert!(has_executable_extension( PathBuf::from("foo.exe"), &[".COM", ".EXE", ".CMD"] )); assert!(has_executable_extension( PathBuf::from("foo.CMD"), &[".COM", ".EXE", ".CMD"] )); } #[test] fn test_extension_not_in_extension_vector() { assert!(!has_executable_extension( PathBuf::from("foo.bar"), &[".COM", ".EXE", ".CMD"] )); } }