use std::sync::{Arc, Mutex};
use mumu::parser::interpreter::{Interpreter, DynamicFnInfo};
use mumu::parser::types::{Value, FunctionValue};
pub fn register_flow_empty(interp: &mut Interpreter) {
let f = Arc::new(Mutex::new(flow_empty_bridge));
let info = DynamicFnInfo::new(f, true);
interp.register_dynamic_function_ex("flow:empty", info);
interp.set_variable(
"flow:empty",
Value::Function(Box::new(FunctionValue::Named("flow:empty".to_string())))
);
}
fn flow_empty_bridge(_interp: &mut Interpreter, args: Vec<Value>) -> Result<Value, String> {
if args.is_empty() {
Ok(Value::Function(empty_transform()))
} else {
Err(format!("flow:empty => expected 0 arguments, got {}", args.len()))
}
}
fn empty_transform() -> Box<FunctionValue> {
use mumu::parser::types::FunctionValue::RustClosure;
Box::new(RustClosure(
"flow:empty".to_string(),
Arc::new(Mutex::new(|_interp: &mut Interpreter, _args: Vec<Value>| {
Err("NO_MORE_DATA".to_string())
})),
0,
))
}