12345use std::{ffi::CStr, os::raw::c_char};67use jrsonnet_evaluator::{Thunk, Val};89use crate::VM;1011121314151617#[unsafe(no_mangle)]18pub unsafe extern "C" fn jsonnet_json_array_append(_vm: &VM, arr: &mut Val, val: &Val) {19 match arr {20 Val::Arr(old) => {21 let mut new = Vec::new();22 for item in old.iter_lazy() {23 new.push(item);24 }2526 new.push(Thunk::evaluated(val.clone()));27 *arr = Val::arr(new);28 }29 _ => panic!("should receive array"),30 }31}32333435363738394041#[unsafe(no_mangle)]42pub unsafe extern "C" fn jsonnet_json_object_append(43 _vm: &VM,44 obj: &mut Val,45 name: *const c_char,46 val: &Val,47) {48 match obj {49 Val::Obj(old) => old50 .extend_field(unsafe { CStr::from_ptr(name).to_str().unwrap().into() })51 .value(val.clone()),52 _ => panic!("should receive object"),53 }54}