grace_cli/commands/recase/
file.rs1use 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}