diff --git a/src/config.rs b/src/config.rs index 4851750..2433ea2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -57,7 +57,7 @@ impl Config { Ok(Self { port: config.server.port, - host: config.server.host.clone(), + host: config.server.host, idle_timeout: config.client.get_idle_timeout(), poll_time_idle: config.client.get_poll_time_idle(), poll_time_window: config.client.get_poll_time_window(), diff --git a/src/config/file_config.rs b/src/config/file_config.rs index 1c41d34..d5113e7 100644 --- a/src/config/file_config.rs +++ b/src/config/file_config.rs @@ -125,31 +125,32 @@ impl FileConfig { } fn merge_cli(&mut self, matches: &ArgMatches) { - self.client.poll_time_idle_seconds = get_arg_value( + get_arg_value( "poll-time-idle", matches, - self.client.poll_time_idle_seconds, + &mut self.client.poll_time_idle_seconds, ); - self.client.poll_time_window_seconds = get_arg_value( + get_arg_value( "poll-time-window", matches, - self.client.poll_time_window_seconds, + &mut self.client.poll_time_window_seconds, ); - self.client.idle_timeout_seconds = - get_arg_value("idle-timeout", matches, self.client.idle_timeout_seconds); - - self.server.port = get_arg_value("port", matches, self.server.port); - self.server.host = get_arg_value("host", matches, self.server.host.clone()); + get_arg_value( + "idle-timeout", + matches, + &mut self.client.idle_timeout_seconds, + ); + get_arg_value("port", matches, &mut self.server.port); + get_arg_value("host", matches, &mut self.server.host); } } -fn get_arg_value(id: &str, matches: &ArgMatches, config_value: T) -> T +fn get_arg_value(id: &str, matches: &ArgMatches, config_value: &mut T) where T: Clone + Send + Sync + 'static, { if let Some(ValueSource::CommandLine) = matches.value_source(id) { - matches.get_one::(id).unwrap().clone() - } else { - config_value + let value = &mut matches.get_one::(id).unwrap().clone(); + std::mem::swap(config_value, value); } }