pub mod properties;
#[cfg(kani)]
pub mod kani_harnesses;
#[cfg(test)]
mod tests;
#[cfg(test)]
mod properties_tests;
use crate::ir::ShellIR;
use crate::models::{Result, VerificationLevel};
pub fn verify(ir: &ShellIR, level: VerificationLevel) -> Result<()> {
match level {
VerificationLevel::None => Ok(()),
VerificationLevel::Basic => verify_basic(ir),
VerificationLevel::Strict => verify_strict(ir),
VerificationLevel::Paranoid => verify_paranoid(ir),
}
}
fn verify_basic(ir: &ShellIR) -> Result<()> {
properties::verify_no_command_injection(ir)?;
Ok(())
}
fn verify_strict(ir: &ShellIR) -> Result<()> {
verify_basic(ir)?;
properties::verify_deterministic(ir)?;
Ok(())
}
fn verify_paranoid(ir: &ShellIR) -> Result<()> {
verify_strict(ir)?;
properties::verify_idempotency(ir)?;
properties::verify_resource_safety(ir)?;
Ok(())
}