aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-08-23 16:26:10 +0200
committerDaniel Mueller <deso@posteo.net>2020-09-05 11:36:14 -0700
commit16ce6d3695f4f54a128d32835232f255a6f6d56d (patch)
tree68f36ea4028cf2f2c8bb14e66fce78baa301ceb5
parent621bc6220a87368c87cd667552438680cae6332a (diff)
downloadnitrocli-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.rs30
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)
}