Get rid of duplicate code
Use structure update and default to reduce duplicated
code.
Change-Id: I6076aa0d3c63c83f312e2f954ce1ba017208bb3a
diff --git a/src/lib.rs b/src/lib.rs
index d7b3601..cbee4f6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -279,6 +279,11 @@
Ermine,
}
+impl Default for RunMode {
+ fn default() -> Self {
+ RunMode::Normal
+ }
+}
fn run_switches_to_mode(tiles: bool, run: bool, ermine: bool) -> RunMode {
if tiles {
RunMode::Tiles
@@ -299,7 +304,7 @@
format!("fargo-story-{}", secs)
}
-#[derive(Debug)]
+#[derive(Debug, Clone, Default)]
pub struct RunCargoOptions {
pub verbose: bool,
pub release: bool,
@@ -314,115 +319,35 @@
impl RunCargoOptions {
pub fn new(verbose: bool, release: bool) -> RunCargoOptions {
- RunCargoOptions {
- verbose,
- release,
- nocapture: false,
- run_mode: RunMode::Normal,
- story_name: None,
- mod_name: None,
- disable_cross: false,
- manifest_path: None,
- cmx_path: None,
- }
+ Self { verbose, release, ..Self::default() }
}
pub fn disable_cross(&self, disable_cross: bool) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: self.nocapture,
- run_mode: self.run_mode,
- story_name: self.story_name.clone(),
- mod_name: self.mod_name.clone(),
- disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { disable_cross, ..self.clone() }
}
pub fn release(&self, release: bool) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: release,
- nocapture: self.nocapture,
- run_mode: self.run_mode,
- story_name: self.story_name.clone(),
- mod_name: self.mod_name.clone(),
- disable_cross: self.disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { release, ..self.clone() }
}
pub fn nocapture(&self, nocapture: bool) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: nocapture,
- run_mode: self.run_mode,
- story_name: self.story_name.clone(),
- mod_name: self.mod_name.clone(),
- disable_cross: self.disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { nocapture, ..self.clone() }
}
pub fn run_mode(&self, run_mode: RunMode) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: self.nocapture,
- run_mode: run_mode,
- story_name: self.story_name.clone(),
- mod_name: self.mod_name.clone(),
- disable_cross: self.disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { run_mode, ..self.clone() }
}
pub fn story_name(&self, story_name: &Option<&str>) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: self.nocapture,
- run_mode: self.run_mode,
- story_name: story_name.map(|name| name.to_string()),
- mod_name: self.mod_name.clone(),
- disable_cross: self.disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { story_name: story_name.map(|name| name.to_string()), ..self.clone() }
}
pub fn mod_name(&self, mod_name: &Option<&str>) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: self.nocapture,
- run_mode: self.run_mode,
- story_name: self.story_name.clone(),
- mod_name: mod_name.map(|name| name.to_string()),
- disable_cross: self.disable_cross,
- manifest_path: self.manifest_path.clone(),
- cmx_path: self.cmx_path.clone(),
- }
+ Self { mod_name: mod_name.map(|name| name.to_string()), ..self.clone() }
}
pub fn manifest_path(&self, manifest_path: Option<PathBuf>) -> RunCargoOptions {
- RunCargoOptions {
- verbose: self.verbose,
- release: self.release,
- nocapture: self.nocapture,
- run_mode: self.run_mode,
- story_name: self.story_name.clone(),
- mod_name: self.mod_name.clone(),
- disable_cross: self.disable_cross,
- manifest_path: manifest_path,
- cmx_path: self.cmx_path.clone(),
- }
+ Self { manifest_path, ..self.clone() }
}
pub fn get_story_name(&self) -> String {
@@ -1165,14 +1090,8 @@
let run_cargo_options = RunCargoOptions {
verbose,
- release: false,
- nocapture: false,
- run_mode: RunMode::Normal,
- story_name: None,
- mod_name: None,
- disable_cross,
- manifest_path: None,
cmx_path: matches.value_of(CMX_PATH).map(|s| PathBuf::from(s)),
+ ..RunCargoOptions::default()
};
if verbose {