diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-08-23 16:26:10 +0200 |
---|---|---|
committer | Daniel Mueller <deso@posteo.net> | 2020-09-05 11:36:14 -0700 |
commit | 16ce6d3695f4f54a128d32835232f255a6f6d56d (patch) | |
tree | 68f36ea4028cf2f2c8bb14e66fce78baa301ceb5 | |
parent | 621bc6220a87368c87cd667552438680cae6332a (diff) | |
download | nitrocli-16ce6d3695f4f54a128d32835232f255a6f6d56d.tar.gz nitrocli-16ce6d3695f4f54a128d32835232f255a6f6d56d.tar.bz2 |
Add Context::from_env constructor
This patch adds the from_env constructor to Context to make the main
function easier to read.
-rw-r--r-- | src/main.rs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs index 79a9c0b..09ceedd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,6 +131,25 @@ pub struct Context<'io> { pub config: config::Config, } +impl<'io> Context<'io> { + fn from_env<O, E>(stdout: &'io mut O, stderr: &'io mut E, config: config::Config) -> Context<'io> + where + O: io::Write, + E: io::Write, + { + Context { + stdout, + stderr, + admin_pin: env::var_os(NITROCLI_ADMIN_PIN), + user_pin: env::var_os(NITROCLI_USER_PIN), + new_admin_pin: env::var_os(NITROCLI_NEW_ADMIN_PIN), + new_user_pin: env::var_os(NITROCLI_NEW_USER_PIN), + password: env::var_os(NITROCLI_PASSWORD), + config, + } + } +} + fn run<'ctx, 'io: 'ctx>(ctx: &'ctx mut Context<'io>, args: Vec<String>) -> i32 { match handle_arguments(ctx, args) { Ok(()) => 0, @@ -150,16 +169,7 @@ fn main() { let rc = match config::Config::load() { Ok(config) => { let args = env::args().collect::<Vec<_>>(); - let ctx = &mut Context { - stdout: &mut stdout, - stderr: &mut stderr, - admin_pin: env::var_os(NITROCLI_ADMIN_PIN), - user_pin: env::var_os(NITROCLI_USER_PIN), - new_admin_pin: env::var_os(NITROCLI_NEW_ADMIN_PIN), - new_user_pin: env::var_os(NITROCLI_NEW_USER_PIN), - password: env::var_os(NITROCLI_PASSWORD), - config, - }; + let ctx = &mut Context::from_env(&mut stdout, &mut stderr, config); run(ctx, args) } |