From 53d89aa75ace7ed44187ccf2bef4a156cd126cd7 Mon Sep 17 00:00:00 2001
From: Robin Krahl <robin.krahl@ireas.org>
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(-)

(limited to 'src')

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)
     }
-- 
cgit v1.2.3