123use std::{4 ffi::CStr,5 os::raw::{c_char, c_double, c_int},6};78use jrsonnet_evaluator::{val::ArrValue, ObjValue, State, Val};9use jrsonnet_gcmodule::Cc;1011121314#[no_mangle]15pub unsafe extern "C" fn jsonnet_json_make_string(_vm: &State, v: *const c_char) -> *mut Val {16 let cstr = CStr::from_ptr(v);17 let str = cstr.to_str().unwrap();18 Box::into_raw(Box::new(Val::Str(str.into())))19}2021#[no_mangle]22pub extern "C" fn jsonnet_json_make_number(_vm: &State, v: c_double) -> *mut Val {23 Box::into_raw(Box::new(Val::Num(v)))24}2526#[no_mangle]27pub extern "C" fn jsonnet_json_make_bool(_vm: &State, v: c_int) -> *mut Val {28 assert!(v == 0 || v == 1);29 Box::into_raw(Box::new(Val::Bool(v == 1)))30}3132#[no_mangle]33pub extern "C" fn jsonnet_json_make_null(_vm: &State) -> *mut Val {34 Box::into_raw(Box::new(Val::Null))35}3637#[no_mangle]38pub extern "C" fn jsonnet_json_make_array(_vm: &State) -> *mut Val {39 Box::into_raw(Box::new(Val::Arr(ArrValue::Eager(Cc::new(Vec::new())))))40}4142#[no_mangle]43pub extern "C" fn jsonnet_json_make_object(_vm: &State) -> *mut Val {44 Box::into_raw(Box::new(Val::Obj(ObjValue::new_empty())))45}