summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2023-06-19 05:47:57 +0000
committerGitHub <noreply@github.com>2023-06-19 01:47:57 -0400
commit751abecfe3cc25888d9170daa641f45f6b0b7666 (patch)
treeb772dcd3ba20fd23337e84fb2c7adeb1b242b035
parent594e091a937e43397e06191783050fcefab2beaf (diff)
other: take ownership of config and matches when building App (#1215)
The clap matches/config struct was taken in as a reference when building the App structure. However, we do not need to keep these around after this, so we can instead take ownership of the match/config and drop it after to save a bit of memory.
-rw-r--r--build.rs2
-rw-r--r--src/args.rs (renamed from src/clap.rs)0
-rw-r--r--src/bin/main.rs18
-rw-r--r--src/lib.rs2
-rw-r--r--src/options.rs23
5 files changed, 26 insertions, 19 deletions
diff --git a/build.rs b/build.rs
index f704ab38..0a051b83 100644
--- a/build.rs
+++ b/build.rs
@@ -5,7 +5,7 @@ use std::{
use clap_complete::{generate_to, shells::Shell};
-include!("src/clap.rs");
+include!("src/args.rs");
fn create_dir(dir: &Path) -> io::Result<()> {
let res = fs::create_dir_all(dir);
diff --git a/src/clap.rs b/src/args.rs
index cd159357..cd159357 100644
--- a/src/clap.rs
+++ b/src/args.rs
diff --git a/src/bin/main.rs b/src/bin/main.rs
index 06757971..25117010 100644
--- a/src/bin/main.rs
+++ b/src/bin/main.rs
@@ -34,7 +34,8 @@ use bottom::{
fn main() -> Result<()> {
// let _profiler = dhat::Profiler::new_heap();
- let matches = clap::get_matches();
+ let matches = args::get_matches();
+
#[cfg(feature = "logging")]
{
if let Err(err) =
@@ -45,10 +46,13 @@ fn main() -> Result<()> {
}
// Read from config file.
- let config_path = read_config(matches.get_one::<String>("config_location"))
- .context("Unable to access the given config file location.")?;
- let mut config: Config = create_or_get_config(&config_path)
- .context("Unable to properly parse or create the config file.")?;
+ let config = {
+ let config_path = read_config(matches.get_one::<String>("config_location"))
+ .context("Unable to access the given config file location.")?;
+
+ create_or_get_config(&config_path)
+ .context("Unable to properly parse or create the config file.")?
+ };
// Get widget layout separately
let (widget_layout, default_widget_id, default_widget_type_option) =
@@ -63,8 +67,8 @@ fn main() -> Result<()> {
// Create an "app" struct, which will control most of the program and store settings/state
let mut app = build_app(
- &matches,
- &mut config,
+ matches,
+ config,
&widget_layout,
default_widget_id,
&default_widget_type_option,
diff --git a/src/lib.rs b/src/lib.rs
index 1655e08d..6424c286 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -52,8 +52,8 @@ pub mod utils {
pub mod gen_util;
pub mod logging;
}
+pub mod args;
pub mod canvas;
-pub mod clap;
pub mod components;
pub mod constants;
pub mod data_conversion;
diff --git a/src/options.rs b/src/options.rs
index d063d463..62243ba2 100644
--- a/src/options.rs
+++ b/src/options.rs
@@ -171,12 +171,15 @@ macro_rules! is_flag_enabled {
}
pub fn build_app(
- matches: &ArgMatches, config: &mut Config, widget_layout: &BottomLayout,
- default_widget_id: u64, default_widget_type_option: &Option<BottomWidgetType>,
- styling: &CanvasStyling,
+ matches: ArgMatches, config: Config, widget_layout: &BottomLayout, default_widget_id: u64,
+ default_widget_type_option: &Option<BottomWidgetType>, styling: &CanvasStyling,
) -> Result<App> {
use BottomWidgetType::*;
+ // Since everything takes a reference, but we want to take ownership here to drop matches/config later...
+ let matches = &matches;
+ let config = &config;
+
let retention_ms =
get_retention_ms(matches, config).context("Update `retention` in your config file.")?;
let autohide_time = is_flag_enabled!(autohide_time, matches, config);
@@ -911,7 +914,7 @@ mod test {
#[test]
fn matches_human_times() {
let config = Config::default();
- let app = crate::clap::build_app();
+ let app = crate::args::build_app();
{
let app = app.clone();
@@ -938,7 +941,7 @@ mod test {
#[test]
fn matches_number_times() {
let config = Config::default();
- let app = crate::clap::build_app();
+ let app = crate::args::build_app();
{
let app = app.clone();
@@ -964,7 +967,7 @@ mod test {
#[test]
fn config_human_times() {
- let app = crate::clap::build_app();
+ let app = crate::args::build_app();
let matches = app.get_matches_from(["btm"]);
let mut config = Config::default();
@@ -989,7 +992,7 @@ mod test {
#[test]
fn config_number_times() {
- let app = crate::clap::build_app();
+ let app = crate::args::build_app();
let matches = app.get_matches_from(["btm"]);
let mut config = Config::default();
@@ -1012,19 +1015,19 @@ mod test {
);
}
- fn create_app(mut config: Config, matches: ArgMatches) -> App {
+ fn create_app(config: Config, matches: ArgMatches) -> App {
let (layout, id, ty) = get_widget_layout(&matches, &config).unwrap();
let styling =
CanvasStyling::new(get_color_scheme(&matches, &config).unwrap(), &config).unwrap();
- super::build_app(&matches, &mut config, &layout, id, &ty, &styling).unwrap()
+ super::build_app(matches, config, &layout, id, &ty, &styling).unwrap()
}
// TODO: There's probably a better way to create clap options AND unify together to avoid the possibility of
// typos/mixing up. Use proc macros to unify on one struct?
#[test]
fn verify_cli_options_build() {
- let app = crate::clap::build_app();
+ let app = crate::args::build_app();
let default_app = {
let app = app.clone();