use tan::{
context::Context,
error::Error,
expr::Expr,
util::{
args::{unpack_float_arg, unpack_int_arg},
module_util::require_module,
},
};
pub fn u8_new(args: &[Expr]) -> Result<Expr, Error> {
let value = unpack_int_arg(args, 0, "value")?;
if !(0..256).contains(&value) {
return Err(Error::invalid_arguments(
"U8 values should be in 0..256",
args[0].range(),
));
}
Ok(Expr::U8(value as u8))
}
pub fn u8_from_float(args: &[Expr]) -> Result<Expr, Error> {
let value = unpack_float_arg(args, 0, "value")?;
if !(0.0..256.0).contains(&value) {
return Err(Error::invalid_arguments(
"U8 values should be in 0..256",
args[0].range(),
));
}
Ok(Expr::U8(value as u8))
}
pub fn setup_lib_u8(context: &mut Context) {
let module = require_module("prelude", context);
module.insert_invocable("U8", Expr::foreign_func(&u8_new));
module.insert_invocable("U8$$Int", Expr::foreign_func(&u8_new));
module.insert_invocable("U8$$Float", Expr::foreign_func(&u8_from_float));
}