yara-x-parser 1.13.0

A parsing library for YARA rules.
Documentation
use crate::ast::{Item, AST};
use crate::cst::CST;
use crate::{ast, Parser, Span};

#[test]
fn ast_from_cst() {
    let source = br#"rule test { condition: true }"#;
    let parser = Parser::new(source);
    let cst = CST::try_from(parser).unwrap();
    let ast = AST::new(source, cst.iter());

    let rule = match ast.items.first().unwrap() {
        Item::Rule(rule) => rule,
        _ => panic!(),
    };

    assert_eq!(rule.identifier.name, "test");

    let source = br#"foo"#;
    let parser = Parser::new(source);
    let cst = CST::try_from(parser).unwrap();
    let mut ast = AST::new(source, cst.iter());

    assert_eq!(
        ast.errors.pop().unwrap(),
        ast::Error::SyntaxError {
            message: String::from(
                "expecting import statement or rule definition"
            ),
            span: Span(0..3)
        }
    );
}