use yara_forge::{
utils::{load_rule_from_file, save_rule_to_file},
validation::validate_rule,
RuleBuilder, ValidationOptions,
};
fn create_invalid_rule() -> Result<(), Box<dyn std::error::Error>> {
println!("Attempting to create an invalid rule...");
let result = RuleBuilder::new("invalid-name!@#")
.with_metadata("author", "YARA Forge")
.with_string("$test", "test")?
.with_condition("$test")
.build();
match result {
Ok(_) => println!("Rule was created successfully (unexpected)"),
Err(e) => println!("Got expected error: {}", e),
}
Ok(())
}
fn validate_invalid_rule() -> Result<(), Box<dyn std::error::Error>> {
println!("\nAttempting to validate an invalid rule...");
let rule = RuleBuilder::new("test_rule")
.with_string("$test", "test")?
.with_condition("invalid_condition")
.build()?;
let result = validate_rule(&rule.to_string(), &ValidationOptions::default());
match result {
Ok(_) => println!("Rule validation passed (unexpected)"),
Err(e) => println!("Got expected error: {}", e),
}
Ok(())
}
fn handle_file_operations() -> Result<(), Box<dyn std::error::Error>> {
println!("\nTesting file operations...");
match load_rule_from_file("nonexistent.yar") {
Ok(_) => println!("File loaded successfully (unexpected)"),
Err(e) => println!("Got expected error: {}", e),
}
let rule = RuleBuilder::new("test_rule")
.with_string("$test", "test")?
.with_condition("$test")
.build()?;
match save_rule_to_file(&rule, "/invalid/path/test.yar") {
Ok(_) => println!("File saved successfully (unexpected)"),
Err(e) => println!("Got expected error: {}", e),
}
Ok(())
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
create_invalid_rule()?;
validate_invalid_rule()?;
handle_file_operations()?;
Ok(())
}