From f23ec6ce90aa7e388a6f849a1b76b0fd150ea2cd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 17 Nov 2019 20:42:25 +0100 Subject: [PATCH] 2018: day03: simplify error --- aoc2018/src/day03.rs | 31 ++++--------------------------- aoc2018/src/lib.rs | 5 +++++ 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/aoc2018/src/day03.rs b/aoc2018/src/day03.rs index 0d7ac04..f68012b 100644 --- a/aoc2018/src/day03.rs +++ b/aoc2018/src/day03.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; use std::collections::HashSet; +use std::error::Error; use std::fmt; +use super::err; use super::Result; const INPUT: &str = include_str!("../input/day03.txt"); @@ -13,31 +15,6 @@ pub fn run() -> Result<()> { Ok(()) } -#[derive(Debug)] -struct ParseError { - line: String, -} - -impl ParseError { - fn new(line: &str) -> Self { - ParseError { - line: line.to_string(), - } - } -} - -impl fmt::Display for ParseError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.line) - } -} - -impl std::error::Error for ParseError { - fn description(&self) -> &str { - &self.line - } -} - struct Claim { x: usize, y: usize, @@ -89,7 +66,7 @@ fn part1(input: &str) -> Result { let mut map: HashMap<(usize, usize), u64> = HashMap::default(); for line in input.lines() { - let claim = parse(line).ok_or(ParseError::new(line))?; + let claim = parse(line).ok_or(err!("Couldn't parse line: {}", line))?; for i in 0..claim.width { for j in 0..claim.height { @@ -116,7 +93,7 @@ fn part2(input: &str) -> Result { let mut set = HashSet::new(); for line in input.lines() { - let claim = parse(line).ok_or(ParseError::new(line))?; + let claim = parse(line).ok_or(err!("Couldn't parse line: {}", line))?; set.insert(claim.id); for i in 0..claim.width { diff --git a/aoc2018/src/lib.rs b/aoc2018/src/lib.rs index 2a592b7..4110969 100644 --- a/aoc2018/src/lib.rs +++ b/aoc2018/src/lib.rs @@ -3,3 +3,8 @@ pub mod day02; pub mod day03; pub type Result = std::result::Result>; + +#[macro_export] +macro_rules! err { + ($($string:expr),+) => (Box::::from(format!($($string),+))) +}