ranty 1.0.0

The Ranty procedural templating language
Documentation
use super::*;

pub fn assert(vm: &mut VM, (condition, message): (bool, Option<String>)) -> RantyStdResult {
    if !condition {
        runtime_error!(
            RuntimeErrorType::AssertError,
            "{}",
            message
                .as_deref()
                .unwrap_or("assertion failed: condition was false")
        );
    }
    Ok(())
}

pub fn assert_not(vm: &mut VM, (condition, message): (bool, Option<String>)) -> RantyStdResult {
    if condition {
        runtime_error!(
            RuntimeErrorType::AssertError,
            "{}",
            message
                .as_deref()
                .unwrap_or("assertion failed: condition was true")
        );
    }
    Ok(())
}

pub fn assert_eq(
    vm: &mut VM,
    (actual, expected, message): (RantyValue, RantyValue, Option<String>),
) -> RantyStdResult {
    if expected != actual {
        runtime_error!(
            RuntimeErrorType::AssertError,
            "{}",
            message.unwrap_or_else(|| format!("expected: {}; actual: {}", expected, actual))
        );
    }
    Ok(())
}

pub fn assert_neq(
    vm: &mut VM,
    (actual, unexpected, message): (RantyValue, RantyValue, Option<String>),
) -> RantyStdResult {
    if unexpected == actual {
        runtime_error!(
            RuntimeErrorType::AssertError,
            "{}",
            message.unwrap_or_else(|| format!("unexpected value: {}", unexpected))
        );
    }
    Ok(())
}