• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::path::Path;
2 
3 /// Check if given path has extension which in the given vector.
has_executable_extension<T: AsRef<Path>, S: AsRef<str>>(path: T, pathext: &[S]) -> bool4 pub fn has_executable_extension<T: AsRef<Path>, S: AsRef<str>>(path: T, pathext: &[S]) -> bool {
5     let ext = path.as_ref().extension().and_then(|e| e.to_str());
6     match ext {
7         Some(ext) => pathext
8             .iter()
9             .any(|e| ext.eq_ignore_ascii_case(&e.as_ref()[1..])),
10         _ => false,
11     }
12 }
13 
14 #[cfg(test)]
15 mod test {
16     use super::*;
17     use std::path::PathBuf;
18 
19     #[test]
test_extension_in_extension_vector()20     fn test_extension_in_extension_vector() {
21         // Case insensitive
22         assert!(has_executable_extension(
23             PathBuf::from("foo.exe"),
24             &[".COM", ".EXE", ".CMD"]
25         ));
26 
27         assert!(has_executable_extension(
28             PathBuf::from("foo.CMD"),
29             &[".COM", ".EXE", ".CMD"]
30         ));
31     }
32 
33     #[test]
test_extension_not_in_extension_vector()34     fn test_extension_not_in_extension_vector() {
35         assert!(!has_executable_extension(
36             PathBuf::from("foo.bar"),
37             &[".COM", ".EXE", ".CMD"]
38         ));
39     }
40 }
41