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#[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}