use pine_builtin_macro::BuiltinFunction;
use pine_core::PineOutput;
use pine_interpreter::{Interpreter, RuntimeError, Value};
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
#[derive(BuiltinFunction)]
#[builtin(name = "runtime.error")]
struct RuntimeErrorFn {
message: String,
}
impl RuntimeErrorFn {
fn execute<O: PineOutput>(&self, _ctx: &mut Interpreter<O>) -> Result<Value<O>, RuntimeError> {
Err(RuntimeError::UserError(self.message.clone()))
}
}
pub fn register<O: PineOutput>() -> Value<O> {
let mut members: HashMap<String, Value<O>> = HashMap::new();
members.insert("error".to_string(), RuntimeErrorFn::builtin_value::<O>());
Value::Object {
type_name: "runtime".to_string(),
fields: Rc::new(RefCell::new(members)),
call: None,
value: None,
}
}