use std::str::FromStr;
use rust_decimal::Decimal;
use tan::{
context::Context,
error::Error,
expr::Expr,
util::{args::unpack_stringable_arg, module_util::require_module},
};
pub fn dec_from_string(args: &[Expr]) -> Result<Expr, Error> {
let string = unpack_stringable_arg(args, 0, "string")?;
let Ok(value) = Decimal::from_str(string) else {
return Err(Error::invalid_arguments(
&format!("string=`{string}` is not a valid Dec number"),
args[0].range(),
));
};
Ok(Expr::Dec(value))
}
pub fn import_lib_dec(context: &mut Context) {
let module = require_module("prelude", context);
module.insert_invocable("Dec", Expr::foreign_func(&dec_from_string));
module.insert_invocable("Dec$$String", Expr::foreign_func(&dec_from_string));
}