use crate::{Environment, MODULE_NAME_ENV, value::Value};
pub(crate) fn builtin(args: &[Value], env: &Environment) -> Option<(Value, Environment)> {
if let [Value::String(module_name)] = &args[..] {
if let Some(Value::String(previous_name)) = env.get(MODULE_NAME_ENV) {
eprintln!(
concat!(
"Error[ksl::builtin::module]: ",
"Current module is already bound as {}.",
),
previous_name
);
None
} else {
Some((
Value::Unit,
Environment::from([(
String::from(MODULE_NAME_ENV),
Value::String(module_name.clone()),
)]),
))
}
} else {
eprintln!(
concat!(
"Error[ksl::builtin::module]: ",
"Only accepts a string as arguments, but {:?} were passed."
),
args
);
None
}
}