summaryrefslogtreecommitdiff
path: root/src/library/utility.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-10-05 19:37:38 +0200
committerLaurenz <laurmaedje@gmail.com>2021-10-05 19:37:38 +0200
commit0a23bfbc23ec68ed229b78c8f9995928c133c4a6 (patch)
treeb3f4c13e634e387a2133a31cf7094dd6f56dd33d /src/library/utility.rs
parent58d1cc68d92b2b81ea402bd33389ecbcacf1d755 (diff)
Add `assert` function
Diffstat (limited to 'src/library/utility.rs')
-rw-r--r--src/library/utility.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/library/utility.rs b/src/library/utility.rs
index e6d5476f..5de67464 100644
--- a/src/library/utility.rs
+++ b/src/library/utility.rs
@@ -4,6 +4,17 @@ use std::str::FromStr;
use super::*;
use crate::color::{Color, RgbaColor};
+/// `assert`: Ensure that a condition is fulfilled.
+pub fn assert(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
+ let Spanned { v, span } = args.expect("condition")?;
+ match v {
+ Value::Bool(true) => {}
+ Value::Bool(false) => bail!(span, "assertion failed"),
+ v => bail!(span, "expected boolean, found {}", v.type_name()),
+ }
+ Ok(Value::None)
+}
+
/// `type`: The name of a value's type.
pub fn type_(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
Ok(args.expect::<Value>("value")?.type_name().into())
@@ -86,7 +97,7 @@ pub fn abs(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
Value::Relative(v) => Value::Relative(v.abs()),
Value::Fractional(v) => Value::Fractional(v.abs()),
Value::Linear(_) => bail!(span, "cannot take absolute value of a linear"),
- _ => bail!(span, "expected numeric value"),
+ v => bail!(span, "expected numeric value, found {}", v.type_name()),
})
}
@@ -157,7 +168,11 @@ pub fn len(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
Value::Str(v) => v.len(),
Value::Array(v) => v.len(),
Value::Dict(v) => v.len(),
- _ => bail!(span, "expected string, array or dictionary"),
+ v => bail!(
+ span,
+ "expected string, array or dictionary, found {}",
+ v.type_name(),
+ ),
}))
}