summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan Geary <rtgnj42@gmail.com>2019-09-06 13:28:06 -0400
committerRyan Geary <rtgnj42@gmail.com>2019-09-06 13:28:06 -0400
commit1ac2906146f8dd7d507e4fee7ec0dd8d1fdead39 (patch)
treeda4aa127d6172eed1ba43fa5048776ae7271dd4a
parent46d79d72509c328bd71b6be1a33d05aa0b005d22 (diff)
Handle errors in parse_range
-rw-r--r--src/main.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs
index 87ba4d2..04ca0a1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -55,6 +55,29 @@ fn main() {
fn parse_range(src: &str) -> Result<Range, ParseIntError> {
let re = Regex::new(r"^(\d*):(\d*)$").unwrap();
- let cap = re.captures_iter(src).next().unwrap();
- return Ok((Some(cap[1].parse()?), Some(cap[2].parse()?)));
+
+ let cap = match re.captures_iter(src).next() {
+ Some(v) => v,
+ None => panic!("failed to parse range argument: {}", src),
+ };
+
+ let start = if cap[1].is_empty() {
+ None
+ } else {
+ match cap[1].parse() {
+ Ok(x) => Some(x),
+ Err(e) => panic!("failed to get range argument: {:?}", e),
+ }
+ };
+
+ let end = if cap[2].is_empty() {
+ None
+ } else {
+ match cap[2].parse() {
+ Ok(x) => Some(x),
+ Err(e) => panic!("failed to get range argument: {:?}", e),
+ }
+ };
+
+ return Ok((start, end));
}