diff options
author | Franz Thoma <franz.thoma@tngtech.com> | 2018-02-22 17:09:18 +0100 |
---|---|---|
committer | Franz Thoma <franz.thoma@tngtech.com> | 2018-02-22 17:14:32 +0100 |
commit | e0092d7275e1ce01e2bff6855ff9d13c714cab1a (patch) | |
tree | 2d8e68e46a5b96f53dbe4288b4d132f869ad7602 /svgbob_cli | |
parent | c2600f749d20dbc1653d82df1515b09bc8619d51 (diff) |
Extract method
Diffstat (limited to 'svgbob_cli')
-rw-r--r-- | svgbob_cli/src/main.rs | 72 |
1 files changed, 24 insertions, 48 deletions
diff --git a/svgbob_cli/src/main.rs b/svgbob_cli/src/main.rs index f4e526e..87ee957 100644 --- a/svgbob_cli/src/main.rs +++ b/svgbob_cli/src/main.rs @@ -14,6 +14,7 @@ use std::path::{Path, PathBuf}; use std::error::Error; use std::io::Read; use std::process::exit; +use std::str::FromStr; fn main() { use clap::{Arg, App, SubCommand}; @@ -101,58 +102,16 @@ fn main() { settings.font_family = font_family.to_string(); } - if let Some(font_size) = args.value_of("font-size") { - match font_size.parse() { - Ok(fs) => { - settings.font_size = fs; - } - Err(e) => { - use std::io::Write; - use std::process::exit; - - writeln!(&mut std::io::stderr(), - "Wrong font size: {}", - e) - .unwrap(); - exit(1); - } - } + if let Some(font_size) = parse_value_of(&args, "font-size") { + settings.font_size = font_size; } - if let Some(stroke_width) = args.value_of("stroke-width") { - match stroke_width.parse() { - Ok(sw) => { - settings.stroke_width = sw; - } - Err(e) => { - use std::io::Write; - use std::process::exit; - - writeln!(&mut std::io::stderr(), - "Wrong stroke width: {}", - e) - .unwrap(); - exit(1); - } - } + if let Some(stroke_width) = parse_value_of(&args, "stroke-width") { + settings.stroke_width = stroke_width; } - if let Some(scale) = args.value_of("scale") { - match scale.parse() { - Ok(s) => { - settings.scale(s); - } - Err(e) => { - use std::io::Write; - use std::process::exit; - - writeln!(&mut std::io::stderr(), - "Wrong scale: {}", - e) - .unwrap(); - exit(1); - } - } + if let Some(scale) = parse_value_of(&args, "scale") { + settings.scale(scale); } let g = Grid::from_str(&*bob, &settings); @@ -175,6 +134,23 @@ fn main() { } } +fn parse_value_of<T: FromStr>(args: &ArgMatches, arg_name: &str) -> Option<T> where <T as std::str::FromStr>::Err: std::fmt::Display { + return args.value_of(arg_name).and_then(|arg| match arg.parse::<T>() { + Ok(a) => Some(a), + Err(e) => { + use std::io::Write; + use std::process::exit; + + writeln!(&mut std::io::stderr(), + "Illegal value for argument {}: {}", + arg_name, + e) + .unwrap(); + exit(1); + } + }); +} + // Batch convert files to svg // use svgbob build -i inputdir/*.bob -o outdir/ fn build(args: &ArgMatches) -> Result<(), Box<Error>> { |