yara 0.32.0

Rust bindings for VirusTotal/yara
use yara::Compiler;

const RULES: &str = r#"
    rule contains_rust {
      strings:
        $rust = "rust" nocase
      condition:
        $rust
    }
"#;
const RULES2: &str = r#"
    rule contains_rust_too {
      strings:
        $more_rust = "rust" nocase
      condition:
        $more_rust
    }
"#;

fn main() {
    let compiler = Compiler::new().unwrap();
    let compiler = compiler
        .add_rules_str(RULES)
        .expect("Should have parsed rule");
    let compiler = compiler
        .add_rules_str(RULES2)
        .expect("Should have parsed rule");
    let ruleset = compiler
        .compile_rules()
        .expect("Should have compiled rules");

    let mut rules = ruleset.get_rules();
    for (i, rule) in rules.iter_mut().enumerate() {
        println!("{}: {}", i, rule.identifier);
        if i % 2 == 1 {
            rule.disable()
        }
    }

    let results = ruleset
        .scan_mem("I love Rust!".as_bytes(), 5)
        .expect("Should have scanned");

    assert_eq!(results.len(), 1);
    assert!(results.iter().any(|r| r.identifier == "contains_rust"));
}