notebook/
notebook.rs

1extern crate vdb;
2
3use std::io;
4use std::io::Write;
5
6use vdb::{Db, Entry};
7
8fn list_entries(db: &mut Db) {
9    let row_ids = db.find_row_ids_by_name("title");
10    let entries = db.entries_from_row_ids(&row_ids, &["title", "text"]);
11    if entries.is_empty() {
12        println!();
13        println!("No entries.");
14    } else {
15        for entry in &entries {
16            if entry.len() >= 2 {
17                println!("{}: {}", entry[0].value, entry[1].value);
18            }
19        }
20    }
21}
22
23fn new_entry(db: &mut Db) {
24    println!("Enter title:");
25    print!("> ");
26    io::stdout().flush().unwrap();
27
28    let mut input = "".to_string();
29    let title = {
30        let _bytes_read = io::stdin().read_line(&mut input).unwrap();
31        input.trim()
32    };
33    if !title.is_empty() {
34        println!("Enter text:");
35        print!("> ");
36        io::stdout().flush().unwrap();
37        let mut input = "".to_string();
38        let _bytes_read = io::stdin().read_line(&mut input).unwrap();
39        let text = input.trim();
40        db.add_row(vec![
41            Entry::new_string("title", title),
42            Entry::new_string("text", text),
43        ]);
44    } else {
45        println!("Abort.");
46    }
47}
48
49fn delete_entry(db: &mut Db) {
50    println!("Enter title to delete:");
51    print!("> ");
52    io::stdout().flush().unwrap();
53
54    let mut input = "".to_string();
55    let title = {
56        let _bytes_read = io::stdin().read_line(&mut input).unwrap();
57        input.trim()
58    };
59    if !title.is_empty() {
60        let row_ids = db.find_row_ids_by_value("title", &Db::db_string(title));
61        db.delete_rows(&row_ids);
62    } else {
63        println!("Abort.");
64    }
65}
66
67fn print_menu() {
68    println!();
69    println!("Main menu");
70    println!("---------");
71    println!("l) list entries");
72    println!("e) enter new entry");
73    println!("d) delete entry");
74    println!("q) save & quit");
75
76    print!("> ");
77    io::stdout().flush().unwrap();
78}
79
80fn main_loop(db: &mut Db) {
81    let mut input = "".to_string();
82    print_menu();
83    while let Ok(_bytes_read) = io::stdin().read_line(&mut input) {
84        let trimmed = input.trim();
85        match trimmed {
86            "l" => list_entries(db),
87            "e" => new_entry(db),
88            "d" => delete_entry(db),
89            "" | "q" => {
90                let _ = db.save();
91                break;
92            }
93            _ => (),
94        }
95        print_menu();
96        input.clear();
97    }
98}
99
100fn main() {
101    let db_name = "notebook";
102    let mut db = if let Ok(db) = Db::load(db_name) {
103        db
104    } else {
105        Db::new(db_name)
106    };
107    main_loop(&mut db);
108}