aoc_parse/
parsers.rs

1mod chars;
2mod collections;
3mod dynamic;
4mod either;
5mod empty;
6mod exact;
7mod lines;
8mod map;
9mod primitive;
10mod regex;
11mod repeat;
12mod rule_set;
13mod sequence;
14mod string;
15
16pub use self::regex::RegexParser;
17pub use chars::{alnum, alpha, any_char, char_of, digit, digit_bin, digit_hex, lower, upper};
18pub use collections::{btree_map, btree_set, hash_map, hash_set, vec_deque};
19pub use either::{alt, either, opt, AltParser, Either, EitherParser};
20pub use empty::{empty, EmptyParser};
21pub use lines::{line, lines, section, sections, LineParser, SectionParser};
22pub use map::{map, single_value, skip, MapParser};
23pub use primitive::{
24    big_int, big_int_bin, big_int_hex, big_uint, big_uint_bin, big_uint_hex, bool, f32, f64, i128,
25    i128_bin, i128_hex, i16, i16_bin, i16_hex, i32, i32_bin, i32_hex, i64, i64_bin, i64_hex, i8,
26    i8_bin, i8_hex, isize, isize_bin, isize_hex, u128, u128_bin, u128_hex, u16, u16_bin, u16_hex,
27    u32, u32_bin, u32_hex, u64, u64_bin, u64_hex, u8, u8_bin, u8_hex, usize, usize_bin, usize_hex,
28    BasicParseIter,
29};
30pub use repeat::{plus, repeat, repeat_sep, star, RepeatParser};
31pub use rule_set::{RuleParser, RuleSetBuilder, RuleSetParser};
32pub use sequence::{pair, sequence, SequenceParser};
33pub use string::StringParser;
34
35// --- Wrappers
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40    use crate::testing::*;
41
42    #[test]
43    fn test_parse() {
44        let p = empty();
45        assert_parse_eq(p, "", ());
46        assert_no_parse(p, "x");
47
48        let p = "ok";
49        assert_parse_eq(p, "ok", ());
50        assert_no_parse(p, "");
51        assert_no_parse(p, "o");
52        assert_no_parse(p, "nok");
53
54        let p = sequence("ok", "go");
55        assert_parse_eq(p, "okgo", ());
56        assert_no_parse(p, "ok");
57        assert_no_parse(p, "go");
58        assert_no_parse(p, "");
59
60        let p = either(empty(), "ok");
61        assert_parse_eq(p, "", Either::Left(()));
62        assert_parse_eq(p, "ok", Either::Right(()));
63        assert_no_parse(p, "okc");
64        assert_no_parse(p, "okok");
65
66        assert_no_parse(&u8, "256");
67
68        assert_parse_eq(&u8, "255", 255u8);
69        assert_parse_eq(&sequence("#", u32), "#100", 100u32);
70        assert_parse_eq(
71            map(&sequence("forward ", u64), |a| a),
72            "forward 1234",
73            1234u64,
74        );
75    }
76}