swiftlet 0.1.5

swiftlet is a high-performance text-parsing library for Rust, inspired by Python’s Lark.
Documentation

macro_rules! test_case {
        ($fn_name:ident, $grammar:expr, $text:expr, $start:expr, $algorithm:expr) => {
            #[test]
            fn $fn_name() {
            let parser_opt = Arc::new(
                ParserOption {
                    algorithm: $algorithm,
                    start: $start.to_string(),
                    ..Default::default()
                }
            );
            match Swiftlet::from_string($grammar, parser_opt) {
                Ok(parsed) => {
                    assert!(parsed.parse($text).is_ok());
                },
                Err(err) => {
                    debug_assert!(false, "{:?}", err);
                }
            }
        }
        }
    }

macro_rules! test_case_multi_input_texts {
        ($fn_name:ident, $grammar:expr, $text:expr, $start:expr, $algorithm:expr) => {
            #[test]
            fn $fn_name() {
            let parser_opt = Arc::new(
                ParserOption {
                    algorithm: $algorithm,
                    start: $start.to_string(),
                    ..Default::default()
                }
            );
            match Swiftlet::from_string($grammar, parser_opt) {
                Ok(parsed) => {
                    for text in $text.iter() {
                        assert!(parsed.parse(text).is_ok(), "{:?} not parse.", text);
                    }
                },
                Err(err) => {
                    debug_assert!(false, "{:?}", err);
                }
            }
        }
        }
    }


macro_rules! multi_test {
        ($fn_name_1:ident, $fn_name_2:ident, $grammar:expr, $text:expr, $start:expr, $algo1:expr, $algo2:expr) => {
            test_case!($fn_name_1, $grammar, $text, $start, $algo1);

            test_case!($fn_name_2, $grammar, $text, $start, $algo2);
    }
}

macro_rules! multi_test_multi_input_texts {
        ($fn_name_1:ident, $fn_name_2:ident, $grammar:expr, $text:expr, $start:expr, $algo1:expr, $algo2:expr) => {
            test_case_multi_input_texts!($fn_name_1, $grammar, $text, $start, $algo1);

            test_case_multi_input_texts!($fn_name_2, $grammar, $text, $start, $algo2);
    }
}