From f88e3e629b1e1a0b6ed80c4e4efba704e56741c0 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:00:41 +0200 Subject: [PATCH 1/7] Add runtime setup helper function --- libimagrt/src/lib.rs | 1 + libimagrt/src/setup.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 libimagrt/src/setup.rs diff --git a/libimagrt/src/lib.rs b/libimagrt/src/lib.rs index ef0874e2..e4503f2e 100644 --- a/libimagrt/src/lib.rs +++ b/libimagrt/src/lib.rs @@ -34,4 +34,5 @@ mod logger; pub mod edit; pub mod error; pub mod runtime; +pub mod setup; diff --git a/libimagrt/src/setup.rs b/libimagrt/src/setup.rs new file mode 100644 index 00000000..620a81cf --- /dev/null +++ b/libimagrt/src/setup.rs @@ -0,0 +1,27 @@ +use clap::App; + +use runtime::Runtime; + +pub type Name = &'static str; +pub type Version<'a> = &'a str; +pub type About = &'static str; + +/// Helper to generate the Runtime object +/// +/// exit()s the program if the runtime couldn't be build, prints error with println!() before +/// exiting +pub fn generate_runtime_setup<'a, B>(name: Name, version: Version<'a>, about: About, builder: B) + -> Runtime<'a> + where B: FnOnce(App<'a, 'a>) -> App<'a, 'a> +{ + use std::process::exit; + use libimagerror::trace::trace_error_dbg; + + Runtime::new(builder(Runtime::get_default_cli_builder(name, version, about))) + .unwrap_or_else(|e| { + println!("Could not set up Runtime"); + println!("{:?}", e); + trace_error_dbg(&e); + exit(1); + }) +} From 2a27bd10c9f9f9294aa7f8264dae6fe00c629167 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 2/7] imag-counter: Remove setup code and use helper --- imag-counter/src/main.rs | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/imag-counter/src/main.rs b/imag-counter/src/main.rs index 8eaa72d4..76dcc00c 100644 --- a/imag-counter/src/main.rs +++ b/imag-counter/src/main.rs @@ -25,7 +25,7 @@ extern crate libimagutil; use std::process::exit; use std::str::FromStr; -use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; use libimagcounter::counter::Counter; use libimagerror::trace::trace_error; use libimagutil::key_value_split::IntoKeyValue; @@ -50,20 +50,10 @@ enum Action { } fn main() { - let name = "imag-counter"; - let version = &version!()[..]; - let about = "Counter tool to count things"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); - } - }; + let rt = generate_runtime_setup("imag-counter", + &version!()[..], + "Counter tool to count things", + build_ui); rt.cli() .subcommand_name() From 2e94de2fcec6b3b3cfd9abb10a479c5caf5d32b4 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 3/7] imag-link: Remove setup code and use helper --- imag-link/src/main.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/imag-link/src/main.rs b/imag-link/src/main.rs index 48da0014..fdfdb764 100644 --- a/imag-link/src/main.rs +++ b/imag-link/src/main.rs @@ -29,6 +29,7 @@ use std::process::exit; use std::ops::Deref; use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; use libimagstore::error::StoreError; use libimagstore::store::Entry; use libimagstore::store::FileLockEntry; @@ -43,20 +44,10 @@ mod ui; use ui::build_ui; fn main() { - let name = "imag-link"; - let version = &version!()[..]; - let about = "Link entries"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); - } - }; + let rt = generate_runtime_setup("imag-link", + &version!()[..], + "Link entries", + build_ui); rt.cli() .subcommand_name() From 04d66d269e753c97ee7eef6bf17996343ce73aca Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 4/7] imag-notes: Remove setup code and use helper --- imag-notes/src/main.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/imag-notes/src/main.rs b/imag-notes/src/main.rs index 7e615afd..4dcaac34 100644 --- a/imag-notes/src/main.rs +++ b/imag-notes/src/main.rs @@ -12,6 +12,7 @@ use std::process::exit; use libimagrt::edit::Edit; use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; use libimagnotes::note::Note; use libimagerror::trace::trace_error; @@ -19,20 +20,10 @@ mod ui; use ui::build_ui; fn main() { - let name = "imag-notes"; - let version = &version!()[..]; - let about = "Note taking helper"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); - } - }; + let rt = generate_runtime_setup("imag-notes", + &version!()[..], + "Note taking helper", + build_ui); rt.cli() .subcommand_name() From 77f9e5ae0e7b77853d6867ce4087f04eba59c89a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 5/7] imag-store: Remove setup code and use helper --- imag-store/src/main.rs | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/imag-store/src/main.rs b/imag-store/src/main.rs index fd0a2c4d..6537687e 100644 --- a/imag-store/src/main.rs +++ b/imag-store/src/main.rs @@ -24,8 +24,7 @@ extern crate libimagstore; extern crate libimagutil; #[macro_use] extern crate libimagerror; -use libimagrt::runtime::Runtime; -use std::process::exit; +use libimagrt::setup::generate_runtime_setup; mod error; mod ui; @@ -42,20 +41,10 @@ use update::update; use delete::delete; fn main() { - let name = "imag-store"; - let version = &version!()[..]; - let about = "Direct interface to the store. Use with great care!"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); - } - }; + let rt = generate_runtime_setup("imag-store", + &version!()[..], + "Direct interface to the store. Use with great care!", + build_ui); rt.cli() .subcommand_name() From 9c374528d9c5c20ef4f9bdaf7d50e0f5da07a563 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 6/7] imag-tag: Remove setup code and use helper --- imag-tag/src/main.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/imag-tag/src/main.rs b/imag-tag/src/main.rs index f737d6e0..d653686f 100644 --- a/imag-tag/src/main.rs +++ b/imag-tag/src/main.rs @@ -12,6 +12,7 @@ extern crate libimagerror; use std::process::exit; use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; use libimagentrytag::tagable::Tagable; use libimagstore::storeid::build_entry_path; use libimagerror::trace::trace_error; @@ -21,20 +22,10 @@ mod ui; use ui::build_ui; fn main() { - let name = "imag-store"; - let version = &version!()[..]; - let about = "Direct interface to the store. Use with great care!"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); - } - }; + let rt = generate_runtime_setup("imag-store", + &version!()[..], + "Direct interface to the store. Use with great care!", + build_ui); let id = rt.cli().value_of("id").unwrap(); // enforced by clap rt.cli() From 2e9dc4730f5f3eeac17471606037600e55244c6e Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 18 May 2016 19:06:05 +0200 Subject: [PATCH 7/7] imag-view: Remove setup code and use helper --- imag-view/src/main.rs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/imag-view/src/main.rs b/imag-view/src/main.rs index 81d2b5e9..2fa7802b 100644 --- a/imag-view/src/main.rs +++ b/imag-view/src/main.rs @@ -28,6 +28,7 @@ use std::result::Result as RResult; use std::process::exit; use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; use libimagstore::store::FileLockEntry; use libimagerror::trace::trace_error; @@ -44,20 +45,10 @@ use viewer::stdout::StdoutViewer; type Result = RResult; fn main() { - let name = "imag-view"; - let version = &version!()[..]; - let about = "View entries (readonly)"; - let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); - let rt = { - let rt = Runtime::new(ui); - if rt.is_ok() { - rt.unwrap() - } else { - println!("Could not set up Runtime"); - println!("{:?}", rt.unwrap_err()); - exit(1); // we can afford not-executing destructors here - } - }; + let rt = generate_runtime_setup( "imag-view", + &version!()[..], + "View entries (readonly)", + build_ui); let entry_id = rt.cli().value_of("id").unwrap(); // enforced by clap