volumen_parser_core 0.2.0

Volumen parser core crate
Documentation
use pretty_assertions::assert_eq;
use volumen_types::*;

pub fn assert_prompts_size(result: ParseResult, expected_size: usize) {
    match result {
        ParseResult::ParseResultSuccess(ParseResultSuccess { prompts, .. }) => {
            assert_eq!(prompts.len(), expected_size);
        }
        ParseResult::ParseResultError(ParseResultError { error, .. }) => {
            panic!("Parsing failed: {}", error)
        }
    }
}

pub fn assert_prompt_spans(src: &str, result: ParseResult) {
    match result {
        ParseResult::ParseResultSuccess(ParseResultSuccess { prompts, .. }) => {
            assert!(
                prompts.len() > 0,
                "Expected at least one prompt inside ParseResult"
            );

            for prompt in &prompts {
                assert_eq!(
                    &src[prompt.span.outer.start as usize..prompt.span.outer.end as usize],
                    prompt.exp
                );

                for var in &prompt.vars {
                    assert_eq!(
                        &src[var.span.outer.start as usize..var.span.outer.end as usize],
                        var.exp
                    );
                }
            }
        }

        _ => panic!("Expected ParseResultSuccess"),
    }
}