aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 8eafd778d4e5534bebf7912085c688833b5eacbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
mod cli;
mod db;
mod gui;
mod model;
mod validation;

use anyhow::Result;
use clap::Parser;

#[derive(Parser)]
#[clap()]
struct Opt {
    /// Path of SQLite database in which to store events
    #[clap(long = "database", default_value = "database.sqlite3")]
    db_path: String,

    /// List today’s events as plain text
    #[clap(long = "list-today")]
    list_today: bool,

    /// Start between <timestamp..timestamp> events as plain text
    #[clap(long = "start-between")]
    start_between: Option<String>,
}

fn main() -> Result<()> {
    let Opt {
        db_path,
        list_today,
        start_between,
    } = Opt::parse();
    let conn = db::init(&db_path)?;
    if list_today {
        print!("{}", cli::today(&conn)?);
    } else {
        match start_between.and_then(cli::parse_timestamp_range) {
            Some((from, to)) => print!("{}", cli::start_between(&conn, from, to)?),
            None => gui::run(conn),
        }
    };
    Ok(())
}