rl_lang/interpreter/stdlib/math/
clamp.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_clamp(
7 eval: &mut Evaluator,
8 value: Value,
9 min: Value,
10 max: Value,
11 span: Span,
12) -> Result<Value, Error> {
13 match (value, min, max) {
14 (Value::Integer(value), Value::Integer(low), Value::Integer(high)) => {
15 Ok(Value::Integer(value.clamp(low, high)))
16 }
17 (Value::Float(value), Value::Float(low), Value::Float(high)) => {
18 Ok(Value::Float(value.clamp(low, high)))
19 }
20 (value, min, max) => Err(eval.err(
21 format!(
22 "clamp() expects a number, got ({}, {}, {})",
23 value.type_name(),
24 min.type_name(),
25 max.type_name()
26 ),
27 span,
28 )),
29 }
30}