From 3539ceb20f5383a332a8ad1fcab816cf083f277e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 18 Aug 2019 23:45:33 -0400 Subject: better error handling --- src/main.rs | 58 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 28 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index f7ce70f..d53ce1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,35 +1,37 @@ -mod display; +mod app; mod paths; mod views; mod ynab; -use std::io::Read; +use snafu::ResultExt; -fn main() { - let mut key = String::new(); - std::fs::File::open(paths::api_key()) - .unwrap() - .read_to_string(&mut key) - .unwrap(); - let key = key.trim(); - let budget = ynab::Budget::new(&key); - - let mut app = cursive::Cursive::default(); - let term_width = app.screen_size().x; - app.set_theme(display::theme()); - app.add_global_callback('q', |s| s.quit()); - - let mut layout = cursive::views::LinearLayout::vertical(); - layout.add_child(cursive::views::TextView::new(format!( - "Budget: {} ({})\n{}", - budget.name(), - budget.id(), - "=".repeat(term_width), - ))); - - layout.add_child(views::TxnTables::new("txn_tables", &budget)); - - app.set_user_data(budget); - app.add_fullscreen_layer(layout); +#[derive(Debug, snafu::Snafu)] +pub enum Error { + #[snafu(display("failed to get api key: {}", source))] + GetApiKey { source: crate::paths::Error }, + + #[snafu(display("failed to load budget: {}", source))] + LoadBudget { source: crate::ynab::BudgetError }, +} + +pub type Result = std::result::Result; + +fn run() -> Result<()> { + let key = paths::read_api_key().context(GetApiKey)?; + let budget = ynab::Budget::new(&key).context(LoadBudget)?; + + let mut app = app::App::new(budget); app.run(); + + Ok(()) +} + +fn main() { + match run() { + Ok(_) => {} + Err(e) => { + eprintln!("ynab-reimbursements: {}", e); + std::process::exit(1); + } + } } -- cgit v1.2.3-54-g00ecf