grace_cli/commands/recase/
file.rs

1use crate::arguments::into::{Into, map_case};
2use crate::arguments::sanitize::maybe_sanitize;
3use crate::core::case::string::recase;
4use crate::core::file::file::{File, FileErr};
5
6pub fn extract_file_name_and_extension(file: &File) -> (String, String) {
7    let file_name = file.file_stem().unwrap_or_default();
8    let extension = file.extension().unwrap_or_default();
9
10    (file_name, extension)
11}
12
13pub fn recase_file(file: Option<String>, into: &Into, is_sanitize: &bool) -> Result<(), FileErr> {
14    let file_path = file.ok_or(FileErr::FileDoesNotExist)?;
15    let file = File::new(file_path.as_str());
16
17    if !file.exist() {
18        return Err(FileErr::FileDoesNotExist);
19    }
20
21    if !file.is_file() {
22        return Err(FileErr::NotAFile);
23    }
24
25    let (file_name, file_extension) = extract_file_name_and_extension(&file);
26    let file_name_to_recase = maybe_sanitize(file_name, is_sanitize);
27
28    let recased_file_name = recase(file_name_to_recase, map_case(into));
29    let to_rename = format!("{}.{}", recased_file_name, file_extension);
30
31    file.rename(&to_rename)?;
32
33    println!("Renamed to: {}", to_rename);
34    Ok(())
35}
36
37pub fn recase_directory(
38    directory: Option<String>,
39    into: &Into,
40    is_sanitize: &bool,
41) -> Result<(), FileErr> {
42    let dir_path = directory.ok_or(FileErr::DirectoryDoesNotExist)?;
43    let directory = File::new(dir_path.as_str());
44
45    if !directory.exist() {
46        return Err(FileErr::DirectoryDoesNotExist);
47    }
48
49    if !directory.is_dir() {
50        return Err(FileErr::NotADirectory);
51    }
52
53    let dir_name = directory.file_stem().unwrap_or_default();
54    let dir_name_to_recase = maybe_sanitize(dir_name, is_sanitize);
55
56    let recased_dir_name = recase(dir_name_to_recase, map_case(into));
57
58    directory.rename(&recased_dir_name)?;
59
60    println!("Renamed to: {}", recased_dir_name);
61    Ok(())
62}