From ab294843e49c2c57bd96e315d2b2802ea0b7b12a Mon Sep 17 00:00:00 2001 From: Jarrod Doyle Date: Mon, 5 Feb 2024 17:15:23 +0000 Subject: [PATCH] Clean up obtaining book file name and language --- src/project.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/project.rs b/src/project.rs index 658565e..74b14b0 100644 --- a/src/project.rs +++ b/src/project.rs @@ -1,4 +1,8 @@ -use std::{collections::HashMap, ffi::OsStr, path::PathBuf}; +use std::{ + collections::HashMap, + ffi::OsStr, + path::{Path, PathBuf}, +}; use walkdir::WalkDir; #[derive(Debug, Clone)] @@ -24,39 +28,27 @@ impl ProjectState { continue; } - let extension = entry.path().extension().and_then(OsStr::to_str); + let path = entry.path(); + let extension = path.extension().and_then(OsStr::to_str); if extension.is_some_and(|ext| ext.to_lowercase() == "str") { - let language = entry - .path() - .parent() - .unwrap() - .strip_prefix(search_path.clone()) - .unwrap() - .to_str() - .unwrap() - .to_owned() - .to_lowercase(); - let file_name = entry - .file_name() - .to_str() - .unwrap() - .to_owned() - .to_lowercase(); + let language = file_name_string(path.parent().unwrap()).to_lowercase(); + let file_name = file_name_string(path).to_lowercase(); books .entry(file_name.clone()) .and_modify(|b: &mut Book| b.languages.push(language.clone())) .or_insert(Book { - path: entry.path().to_owned(), + path: path.to_owned(), file_name, languages: vec![language], }); - // books.push(Book { - // path: entry.path().to_owned(), - // file_name: entry.file_name().to_str().unwrap().to_owned(), - // }); } } Self { path, books } } } + +fn file_name_string(path: &Path) -> String { + let file_name = path.file_name(); + file_name.map(|s| s.to_str().unwrap().to_owned()).unwrap() +}