diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-08-18 23:45:33 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-08-18 23:45:33 -0400 |
commit | 3539ceb20f5383a332a8ad1fcab816cf083f277e (patch) | |
tree | 5cea964a052c7c0bd967ede1d4283b75eba58ea5 /src/main.rs | |
parent | ca8b49db6c369bc9b5c71a43ca7eb31140223cf1 (diff) | |
download | ynab-api-3539ceb20f5383a332a8ad1fcab816cf083f277e.tar.gz ynab-api-3539ceb20f5383a332a8ad1fcab816cf083f277e.zip |
better error handling
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 58 |
1 files changed, 30 insertions, 28 deletions
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<T> = std::result::Result<T, Error>; + +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); + } + } } |