From 6d58bafa02cd1b3c2c4cd86e518c3fca0a66fc3e Mon Sep 17 00:00:00 2001 From: Jane Petrovna Date: Tue, 28 Dec 2021 17:49:16 -0500 Subject: [PATCH] args checking --- src/main.rs | 5 ++++- src/util/pattern.rs | 49 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4755a1c..b2dd4b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,7 +35,7 @@ fn main() { //pattern parsing let mul_string = format_multiline(concat!( - "val 0 0 255", + "val 0 0 255\n", "val r 255" )); let res: Result>, ParseError> = mul_string.iter() @@ -44,6 +44,9 @@ fn main() { if res.is_ok() { pattern = res.unwrap(); } + else { + println!("ret err {:?}", res.unwrap_err()); + } //pattern management loop { diff --git a/src/util/pattern.rs b/src/util/pattern.rs index fe24ecb..9dae8db 100644 --- a/src/util/pattern.rs +++ b/src/util/pattern.rs @@ -54,19 +54,43 @@ impl Pattern for Value { } } fn parse(args: Vec) -> Result { - let param1 = args[1].parse::(); - let param2 = args[2].parse::(); - let param3 = args[3].parse::(); - if param1.is_ok() && param2.is_ok() && param3.is_ok() { + let param1 = + if args.len() >= 1 { + match args[1].parse::() { + Ok(i) => Some(i), + Err(_) => None + } + } else { + None + } + let param2 = + if args.len() >= 2 { + match args[2].parse::() { + Ok(i) => Some(i), + Err(_) => None + } + } else { + None + } + let param3 = + if args.len() >= 3 { + match args[3].parse::() { + Ok(i) => Some(i), + Err(_) => None + } + } else { + None + } + if param1.is_some() && param2.is_some() && param3.is_some() { Ok(Value{ - r: Some(param1.unwrap()), - g: Some(param2.unwrap()), - b: Some(param3.unwrap()) + r: param1, + g: param2, + b: param3 }) } - else { + else if args.len() >= 2 { match param2 { - Ok(i) => match args[1].as_str() { + Some(i) => match args[1].as_str() { "r" => { Ok(Value { r: Some(i), @@ -88,11 +112,14 @@ impl Pattern for Value { b: Some(i) }) } - _ => Err("unreachable".into()) + _ => Err("no rgb".into()) }, - Err(e) => Err(Box::new(e)) + None => Err("no param2".into()) } } + else { + Err("incorrect number of arguments".into()) + } } }