home ~ projects ~ socials

Get A List Of Files With Specific Extensions In A Single Directory In Rust

use std::fs;
use std::path::PathBuf;

fn main() {
  let dir = PathBuf::from(".");
  let extensions = vec!["txt", "rs"];
  let files = get_files_in_dir_with_extensions(&dir, &extensions);
  dbg!(files);
}

pub fn get_files_in_dir_with_extensions(dir: &PathBuf, extensions: &Vec<&str>) -> Vec<PathBuf> {
    fs::read_dir(dir)
        .unwrap()
        .into_iter()
        .filter(|p| {
            if p.as_ref().unwrap().path().is_file() {
                true
            } else {
                false
            }
        })
        .map(|p| p.as_ref().unwrap().path())
        .filter(|p| {
            !p.file_name().unwrap().to_str().unwrap().starts_with(".")
        })
        .filter(|p| {
          match p.extension() {
            Some(ext) => {
              extensions.contains(&ext.to_str().unwrap())
            },
            None => false
          }
        })
        .collect()
}
Output:
[_active_nvim_run:8:3] files = [
    "./read_first_line.txt",
    "./test.rs",
    "./og_image.rs",
    "./test.txt",
    "./alfa.txt",
]
-- end of line --