flow-mumu 0.1.4

Stream tranform tools plugin for the Lava language
Documentation
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,
    ))
}