robinpath 0.2.0

RobinPath - A lightweight, fast scripting language interpreter for automation and data processing
Documentation
use crate::executor::Environment;
use crate::value::Value;

pub fn register(env: &mut Environment) {
    env.register_builtin("json.parse", |args, _| {
        if let Some(Value::String(s)) = args.first() {
            match serde_json::from_str::<serde_json::Value>(s) {
                Ok(v) => Ok(Value::from(v)),
                Err(e) => Err(format!("json.parse: {}", e)),
            }
        } else {
            Ok(Value::Null)
        }
    });

    env.register_builtin("json.stringify", |args, _| {
        if let Some(val) = args.first() {
            let json_val: serde_json::Value = val.clone().into();
            Ok(Value::String(serde_json::to_string(&json_val).unwrap_or_default()))
        } else {
            Ok(Value::String("null".to_string()))
        }
    });

    env.register_builtin("json.isValid", |args, _| {
        if let Some(Value::String(s)) = args.first() {
            Ok(Value::Bool(serde_json::from_str::<serde_json::Value>(s).is_ok()))
        } else {
            Ok(Value::Bool(false))
        }
    });
}