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))
}
});
}