From 99133bf07da7e0dfd558d0096ce0a4f08aa307c5 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Sun, 23 Aug 2020 16:26:10 +0200 Subject: Add Context::from_env constructor This patch adds the from_env constructor to Context to make the main function easier to read. --- src/main.rs | 30 ++++++++++++++++++++---------- 1 file 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(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) -> 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::>(); - 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) } -- cgit v1.2.1