duplicate_code 0.2.0

A tool for parsing directories scanning all the files within to find duplicate segments of code across files.
use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;

use crate::model::*;

pub fn get_files_in_current_directory() -> RawFiles {
    get_files_in_directory("./")
}

fn get_files_in_directory(directory: &str) -> RawFiles {
    let mut files = Vec::new();

    match std::fs::read_dir(directory) {
        Ok(entries) => {
            for entry in entries {
                match entry {
                    Ok(entry) => {
                        let path = entry.path();
                        let name = path.to_str().unwrap();

                        if path.is_file() {
                            files.push(get_raw_file(&name));
                        } else {
                            files.extend(get_files_in_directory(name));
                        }
                    }
                    Err(error) => {
                        error!("{}", error);
                        std::process::exit(1);
                    }
                }
            }
        }
        Err(error) => {
            error!("{}", error);
            std::process::exit(1);
        }
    }

    files
}

fn get_raw_file(filename: &str) -> RawFile {
    match read_lines(filename) {
        Ok(buffered_lines) => {
            let mut lines = vec![];

            for line in buffered_lines {
                if let Ok(line) = line {
                    let trimmed_line = line.trim();
                    lines.push(trimmed_line.to_string());
                }
            }

            RawFile {
                filename: filename.to_string(),
                lines,
            }
        }
        Err(error) => {
            error!("{}", error);
            std::process::exit(1);
        }
    }
}

fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where
    P: AsRef<Path>,
{
    let file = File::open(filename)?;
    Ok(io::BufReader::new(file).lines())
}