aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-08-23 16:26:10 +0200
committerDaniel Mueller <deso@posteo.net>2021-01-10 17:37:53 -0800
commit53d89aa75ace7ed44187ccf2bef4a156cd126cd7 (patch)
tree9bd2a1b69032b95bb668feb24c8f1dfb800244a9 /src
parent4f37ab793f2a094ce24e010c06d9c71ab95873a7 (diff)
downloadnitrocli-53d89aa75ace7ed44187ccf2bef4a156cd126cd7.tar.gz
nitrocli-53d89aa75ace7ed44187ccf2bef4a156cd126cd7.tar.bz2
Add Context::from_env constructor
This patch adds the from_env constructor to Context to make the main function easier to read.
Diffstat (limited to 'src')
-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)
}