Merge pull request #417 from matthiasbeyer/libimagrt/runtime-setup-helper

Libimagrt/runtime setup helper
This commit is contained in:
Matthias Beyer 2016-05-18 23:39:56 +02:00
commit 5ae2dcf2a8
8 changed files with 58 additions and 87 deletions

View File

@ -25,7 +25,7 @@ extern crate libimagutil;
use std::process::exit; use std::process::exit;
use std::str::FromStr; use std::str::FromStr;
use libimagrt::runtime::Runtime; use libimagrt::setup::generate_runtime_setup;
use libimagcounter::counter::Counter; use libimagcounter::counter::Counter;
use libimagerror::trace::trace_error; use libimagerror::trace::trace_error;
use libimagutil::key_value_split::IntoKeyValue; use libimagutil::key_value_split::IntoKeyValue;
@ -50,20 +50,10 @@ enum Action {
} }
fn main() { fn main() {
let name = "imag-counter"; let rt = generate_runtime_setup("imag-counter",
let version = &version!()[..]; &version!()[..],
let about = "Counter tool to count things"; "Counter tool to count things",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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);
}
};
rt.cli() rt.cli()
.subcommand_name() .subcommand_name()

View File

@ -29,6 +29,7 @@ use std::process::exit;
use std::ops::Deref; use std::ops::Deref;
use libimagrt::runtime::Runtime; use libimagrt::runtime::Runtime;
use libimagrt::setup::generate_runtime_setup;
use libimagstore::error::StoreError; use libimagstore::error::StoreError;
use libimagstore::store::Entry; use libimagstore::store::Entry;
use libimagstore::store::FileLockEntry; use libimagstore::store::FileLockEntry;
@ -43,20 +44,10 @@ mod ui;
use ui::build_ui; use ui::build_ui;
fn main() { fn main() {
let name = "imag-link"; let rt = generate_runtime_setup("imag-link",
let version = &version!()[..]; &version!()[..],
let about = "Link entries"; "Link entries",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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);
}
};
rt.cli() rt.cli()
.subcommand_name() .subcommand_name()

View File

@ -12,6 +12,7 @@ use std::process::exit;
use libimagrt::edit::Edit; use libimagrt::edit::Edit;
use libimagrt::runtime::Runtime; use libimagrt::runtime::Runtime;
use libimagrt::setup::generate_runtime_setup;
use libimagnotes::note::Note; use libimagnotes::note::Note;
use libimagerror::trace::trace_error; use libimagerror::trace::trace_error;
@ -19,20 +20,10 @@ mod ui;
use ui::build_ui; use ui::build_ui;
fn main() { fn main() {
let name = "imag-notes"; let rt = generate_runtime_setup("imag-notes",
let version = &version!()[..]; &version!()[..],
let about = "Note taking helper"; "Note taking helper",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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);
}
};
rt.cli() rt.cli()
.subcommand_name() .subcommand_name()

View File

@ -24,8 +24,7 @@ extern crate libimagstore;
extern crate libimagutil; extern crate libimagutil;
#[macro_use] extern crate libimagerror; #[macro_use] extern crate libimagerror;
use libimagrt::runtime::Runtime; use libimagrt::setup::generate_runtime_setup;
use std::process::exit;
mod error; mod error;
mod ui; mod ui;
@ -42,20 +41,10 @@ use update::update;
use delete::delete; use delete::delete;
fn main() { fn main() {
let name = "imag-store"; let rt = generate_runtime_setup("imag-store",
let version = &version!()[..]; &version!()[..],
let about = "Direct interface to the store. Use with great care!"; "Direct interface to the store. Use with great care!",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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);
}
};
rt.cli() rt.cli()
.subcommand_name() .subcommand_name()

View File

@ -12,6 +12,7 @@ extern crate libimagerror;
use std::process::exit; use std::process::exit;
use libimagrt::runtime::Runtime; use libimagrt::runtime::Runtime;
use libimagrt::setup::generate_runtime_setup;
use libimagentrytag::tagable::Tagable; use libimagentrytag::tagable::Tagable;
use libimagstore::storeid::build_entry_path; use libimagstore::storeid::build_entry_path;
use libimagerror::trace::trace_error; use libimagerror::trace::trace_error;
@ -21,20 +22,10 @@ mod ui;
use ui::build_ui; use ui::build_ui;
fn main() { fn main() {
let name = "imag-store"; let rt = generate_runtime_setup("imag-store",
let version = &version!()[..]; &version!()[..],
let about = "Direct interface to the store. Use with great care!"; "Direct interface to the store. Use with great care!",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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 id = rt.cli().value_of("id").unwrap(); // enforced by clap let id = rt.cli().value_of("id").unwrap(); // enforced by clap
rt.cli() rt.cli()

View File

@ -28,6 +28,7 @@ use std::result::Result as RResult;
use std::process::exit; use std::process::exit;
use libimagrt::runtime::Runtime; use libimagrt::runtime::Runtime;
use libimagrt::setup::generate_runtime_setup;
use libimagstore::store::FileLockEntry; use libimagstore::store::FileLockEntry;
use libimagerror::trace::trace_error; use libimagerror::trace::trace_error;
@ -44,20 +45,10 @@ use viewer::stdout::StdoutViewer;
type Result<T> = RResult<T, ViewError>; type Result<T> = RResult<T, ViewError>;
fn main() { fn main() {
let name = "imag-view"; let rt = generate_runtime_setup( "imag-view",
let version = &version!()[..]; &version!()[..],
let about = "View entries (readonly)"; "View entries (readonly)",
let ui = build_ui(Runtime::get_default_cli_builder(name, version, about)); build_ui);
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 entry_id = rt.cli().value_of("id").unwrap(); // enforced by clap let entry_id = rt.cli().value_of("id").unwrap(); // enforced by clap

View File

@ -34,4 +34,5 @@ mod logger;
pub mod edit; pub mod edit;
pub mod error; pub mod error;
pub mod runtime; pub mod runtime;
pub mod setup;

27
libimagrt/src/setup.rs Normal file
View File

@ -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);
})
}