summaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: 37cf160ef339b7bc9a1e7229af1789287f7f4e41 (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
#[macro_use] extern crate anyhow;
#[macro_use] extern crate log;

use anyhow::Result;
use cursive::CursiveExt;
use cursive::event::{Event, EventTrigger};

mod main_view;
mod maillist_view;
mod configuration;
mod util;

use configuration::Configuration;

fn main() -> Result<()> {
    cursive::logger::init();

    let mut config = config::Config::default();
    config
        .merge(config::File::with_name("config"))?
        .merge(config::Environment::with_prefix("MUAR"))?;
    let config = config.try_into::<Configuration>()?;

    let mut siv = cursive::Cursive::default();

    let event = Event::Char('q');
    let trigger: EventTrigger = event.clone().into();
    siv.set_on_post_event(trigger, |s| s.quit());

    siv.add_fullscreen_layer(main_view::MainView::new(config)?);
    siv.add_global_callback('~', cursive::Cursive::toggle_debug_console);

    debug!("Starting cursive");
    siv.run();

    Ok(())
}