keyvalues-parser 0.2.3

A parser/renderer for vdf text
Documentation
use keyvalues_parser::Vdf;
use pretty_assertions::assert_eq;

// Mimics the behavior of the parse fuzzer test for regressions testing
fn parse_valid(contents: &str) {
    let parsed = Vdf::parse(contents).expect("Input has to be valid here");
    let vdf_text = parsed.to_string();
    let reparsed = Vdf::parse(&vdf_text).unwrap();
    assert_eq!(parsed, reparsed);
}

// Checks that we return an error instead of panicking or hanging
fn parse_invalid(contents: &str) {
    Vdf::parse(contents).unwrap_err();
}

macro_rules! gen_fuzzer_tests {
    ( $test_fn:ident, $( ( $name:ident, $input:expr ) ),* $(,)? ) => {
        $(
            #[test]
            fn $name() {
                let contents = $input;
                $test_fn(contents);
            }
        )*
    };
}

mod valid {
    use super::*;

    gen_fuzzer_tests!(
        parse_valid,
        (unqoted_backslash_key, r#"\ """#),
        (escaped_chars, r#""" "\r\\\n\t\"""#),
    );
}

mod invalid {
    use super::*;

    gen_fuzzer_tests!(
        parse_invalid,
        (empty, ""),
        (partial_map, "a{\n\"\""),
        (macrolike_key_then_map, "#basefoo{}"),
        (macrolike_key_then_str, "#base no_vdf"),
        (trailing_bytes, "foo {}\n\ntrailing bytes"),
    );
}