1use std::fs;
2use std::io;
3use std::path::PathBuf;
4
5fn search_term(args: &[String]) -> String {
6 args.iter()
7 .map(|x| x.to_lowercase())
8 .collect::<Vec<String>>()
9 .join("-")
10}
11
12pub fn list_notes(path: &PathBuf) -> io::Result<()> {
13 read_notes_dir(path)
14 .iter()
15 .for_each(|entry| println!("{}", entry.path().display()));
16 Ok(())
17}
18
19pub fn search_notes(path: &PathBuf, args: &[String]) -> io::Result<()> {
20 let search = search_term(args);
21
22 read_notes_dir(path)
23 .iter()
24 .filter(|entry| entry.file_name().into_string().unwrap().contains(&search))
25 .for_each(|entry| println!("{}", entry.path().display()));
26
27 Ok(())
28}
29
30pub fn print_notes(path: &PathBuf, args: &[String]) -> io::Result<()> {
31 let search = search_term(args);
32 read_notes_dir(path)
33 .iter()
34 .filter(|entry| entry.file_name().into_string().unwrap().contains(&search))
35 .for_each(|entry| {
36 let contents =
37 fs::read_to_string(entry.path()).expect("Something went wrong reading the file");
38 println!("{}", contents);
39 });
40
41 Ok(())
42}
43
44fn read_notes_dir(path: &PathBuf) -> Vec<fs::DirEntry> {
45 fs::read_dir(path).unwrap().map(|e| e.unwrap()).collect()
46}