diff --git a/README.md b/README.md index 7d7b49e..94c0a0a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,51 @@ -# eyes +# Eyes +## A simpler way to parse using human-readable templates + +Eyes was made for the primary purpose of parsing challenge inputs for [Advent of Code](https://adventofcode.com) challenges. + +It currently provides limited functionality, but more options may be added provided they are useful additions for parsing slightly more complicated formats. + +I was told this functionality is similar to `scanf` from C. + +### Examples: + +```rust +let input = "#lol @ 338,7643: 20.2x24.5"; +let template = "#{} @ {},{}: {}x{}"; + +println!("input: '{}'", input); +println!("pattern: '{}'", template); + +let (id, x, y, w, h) = parse!(input, template, String, isize, isize, f64, f64); + +println!("id: {:?}", id); +println!("x: {:?}", x); +println!("y: {:?}", y); +println!("w: {:?}", w); +println!("h: {:?}", h); + +assert_eq!((id.as_str(), x, y, w, h), ("lol", 338, 7643, 20.2, 24.5)); + +``` + +**Eyes** will try to expand its captures, so that the following example also works as expected: + +```rust +let input = "turn off 660,55 through 986,197"; +let template = "{} {},{} through {},{}"; + +println!("input: '{}'", input); +println!("pattern: '{}'", template); + +let (op, x1, y1, x2, y2) = try_parse!(input, template, String, usize, usize, usize, usize); + +println!("op: {:?}", op); +println!("p1: {:?}", (&x1, &y1)); +println!("p2: {:?}", (&x2, &y2)); + +assert_eq!( + (op.unwrap().as_str(), x1, y1, x2, y2), + ("turn off", Ok(660), Ok(55), Ok(986), Ok(197)) +); +```