A simpler way to parse using human-readable templates.
Go to file
Frederik Palmø 154840f9f8 added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00
src added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00
.gitignore remove .vscode folder 2021-10-24 14:34:02 +02:00
Cargo.lock added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00
Cargo.toml added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00
LICENSE added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00
README.md added docs and streamlined code, changed try_parse 2022-11-15 13:10:48 +01:00

README.md

eyes

A simpler way to parse using human-readable templates.

The crate's primary purpose is parsing challenge inputs for Advent of Code challenges. It currently provides limited functionality, but more options may be added provided they are useful additions for parsing slightly more complicated formats.

This crate does not have any dependencies, as I wanted to keep it simple to and lightweight in design.

Syntax

The only special characters in templates are curly brackets ('{}'). These act as stand-ins for where the extracted values are in the input strings.

Examples:

# #[macro_use] extern crate eyes;
# fn main() {
let input = "#lol @ 338,7643: 20.2x24.5";
let template = "#{} @ {},{}: {}x{}";

let (id, x, y, w, h) = eyes::parse!(input, template, String, isize, isize, f64, f64);

assert_eq!((id.as_str(), x, y, w, h), ("lol", 338, 7643, 20.2, 24.5));
# }

eyes will try to expand capture groups, so that the following example also works as expected:

# #[macro_use] extern crate eyes;
# fn main() {
let input = "turn off 660,55 through 986,197";
let template = "{} {},{} through {},{}";

let (op, x1, y1, x2, y2) = eyes::parse!(input, template, String, usize, usize, usize, usize);

assert_eq!(
    (op.as_str(), x1, y1, x2, y2),
    ("turn off", 660, 55, 986, 197)
);
# }

Notice that "turn off" is captured correctly, even though it contains a space.