note_rs/
note.rs

1use crate::FileHandler;
2use colored::*;
3use std::iter::FromIterator;
4use std::ops::RangeInclusive;
5use std::path::Path;
6
7pub struct Notes {
8    file: FileHandler,
9    lines: Vec<String>,
10}
11
12impl Notes {
13    pub fn new<P: AsRef<Path>>(path: P) -> Self {
14        let file = FileHandler::new(path);
15        Notes {
16            lines: file.read(),
17            file,
18        }
19    }
20    pub fn delete_line(mut self, index: usize) -> Self {
21        self.lines.remove(index);
22        self
23    }
24    pub fn delete_range_lines(mut self, range: RangeInclusive<usize>) -> Self {
25        self.lines.drain(range);
26        self
27    }
28    pub fn append_line(mut self, line: &str) -> Self {
29        self.lines.extend(
30            line
31                .lines()
32                .map(|x| x.trim().to_string())
33                .collect::<Vec<String>>(),
34        );
35        self
36    }
37    pub fn insert_line(mut self, index: usize, line: &str) -> Self {
38        self.lines.insert(index, line.to_owned());
39        self
40    }
41    pub fn get_line(&self, index: usize) -> String {
42        self.lines.get(index).unwrap().clone()
43    }
44    pub fn get_range_lines(&self, range: RangeInclusive<usize>) -> String {
45        Vec::from_iter(self.lines[range].iter().cloned())
46            .into_iter()
47            .map(|x| x + "\n")
48            .collect::<Vec<String>>()
49            .join("")
50    }
51    pub fn count_lines(&self) -> usize {
52        self.lines.len()
53    }
54    pub fn print_line(self, index: usize) -> Self {
55        println!(
56            "{}",
57            self.lines.get(index).unwrap_or(&"Not Exist".to_owned())
58        );
59        self
60    }
61    pub fn print_all_lines(self) -> Self {
62        for (i, v) in self.lines.clone().iter().enumerate() {
63            println!("({})- {}", i.to_string().green(), v);
64        }
65        self
66    }
67    pub fn flush(self) -> std::io::Result<()> {
68        self.file.write(self.lines)
69    }
70}