git.delta.rocks / jrsonnet / refs/commits / 4ad9956e5f9b

difftreelog

source

bindings/jsonnet/src/val_make.rs1.2 KiBsourcehistory
1//! Create values in VM23use 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;1011/// # Safety12///13/// This function is safe, if received v is a pointer to normal C string14#[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}