use microcad_builtin_proc_macros::builtin_mod;
#[builtin_mod]
#[allow(clippy::module_inception)]
pub mod log {
use microcad_builtin_proc_macros::builtin_fn;
use microcad_lang::{eval::*, parameter, value::*};
use microcad_lang_base::{DiagError, PushDiag};
#[builtin_fn(x)]
pub fn error() -> Symbol {
|_, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), DiagError> {
context.error(
args,
EvalError::BuiltinError(format!("{value}", value = arg.value)),
)
})?;
Ok(Value::None)
}
}
#[builtin_fn(x)]
pub fn warning() -> Symbol {
|_, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), DiagError> {
context.warning(
args,
EvalError::BuiltinError(format!("{value}", value = arg.value)),
)
})?;
Ok(Value::None)
}
}
#[builtin_fn(x)]
pub fn info() -> Symbol {
|_, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), Box<EvalError>> {
context.info(args, format!("{value}", value = arg.value));
Ok(())
})?;
Ok(Value::None)
}
}
#[builtin_fn(x)]
pub fn todo() -> Symbol {
|_, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), DiagError> {
context.error(args, EvalError::Todo(format!("{value}", value = arg.value)))
})?;
Ok(Value::None)
}
}
}