1use std::fs;
2use std::time;
3use std::process;
4
5pub struct Config {
6 pub path: String,
7}
8
9impl Config {
10 pub fn build(args: &[String]) -> Result<Config, &'static str> {
11 let mut path = String::from("./");
12
13 if args.len() > 1 {
14 path = args[1].clone();
15 }
16
17 Ok(Config { path })
18 }
19}
20
21
22pub fn run(path: String) {
23 let dir = fs::read_dir(path.clone()).unwrap_or_else(|err| {
24 eprintln!("Error getting file/folder metadata `{err}`");
25 process::exit(1);
26 });
27
28 for i in dir {
29 let f_name = i.unwrap_or_else(|err| {
30 eprintln!("Error getting file/folder metadata `{err}`");
31 process::exit(1);
32 }).path().display().to_string().replace(&path, "").replace("/", "");
33
34 let f_path = format!("{path}/{f_name}");
35
36 let mut f_type = "Folder";
37
38 if fs::metadata(f_path.clone()).unwrap_or_else(|err| {
39 eprintln!("Error getting file/folder metadata `{err}`");
40 process::exit(1);
41 }).is_file() {
42 f_type = "File";
43 }
44
45 let mut f_created = time::SystemTime::elapsed(&fs::metadata(f_path.clone()).unwrap_or_else(|err| {
46 eprintln!("Error getting file/folder metadata `{err}`");
47 process::exit(1);
48 }).created().unwrap_or_else(|err| {
49 eprintln!("Error getting file/folder creation time `{err}`");
50 process::exit(1);
51 })).unwrap_or_else(|err| {
52 eprintln!("Error getting file/folder creation time `{err}`");
53 process::exit(1);
54 }).as_secs_f64().to_string();
55
56 let mut f_modified = time::SystemTime::elapsed(&fs::metadata(f_path.clone()).unwrap_or_else(|err| {
57 eprintln!("Error getting file/folder metadata `{err}`");
58 process::exit(1);
59 }).modified().unwrap_or_else(|err| {
60 eprintln!("Error getting file/folder modified time `{err}`");
61 process::exit(1);
62 })).unwrap_or_else(|err| {
63 eprintln!("Error getting file/folder modified time `{err}`");
64 process::exit(1);
65 }).as_secs_f64().to_string();
66
67 let mut f_accessed = time::SystemTime::elapsed(&fs::metadata(f_path.clone()).unwrap_or_else(|err| {
68 eprintln!("Error getting file/folder metadata `{err}`");
69 process::exit(1);
70 }).accessed().unwrap_or_else(|err| {
71 eprintln!("Error getting file/folder accessed time `{err}`");
72 process::exit(1);
73 })).unwrap_or_else(|err| {
74 eprintln!("Error getting file/folder accessed time `{err}`");
75 process::exit(1);
76 }).as_secs_f64().to_string();
77
78 f_created = convert_time_to_days(f_created);
79
80 f_modified = convert_time_to_days(f_modified);
81
82 f_accessed = convert_time_to_days(f_accessed);
83
84 print!("{} \t \t {} \t \t {} \t \t {} \t \t {} \n", f_type, f_created, f_modified, f_accessed, f_name);
85 }
86}
87
88
89fn convert_time_to_days(time: String) -> String {
90 ((time.parse::<f64>().unwrap_or_else(|err| {
91 eprintln!("Error parsing data `{err}`");
92 process::exit(1);
93 }) / 86400.0) as i64).to_string()
94}