123use std::{4 ffi::CString,5 os::raw::{c_char, c_double, c_int},6};78use jrsonnet_evaluator::{State, Val};910#[no_mangle]11pub extern "C" fn jsonnet_json_extract_string(_vm: &State, v: &Val) -> *mut c_char {12 match v {13 Val::Str(s) => CString::new(&*s as &str).unwrap().into_raw(),14 _ => std::ptr::null_mut(),15 }16}17#[no_mangle]18pub extern "C" fn jsonnet_json_extract_number(_vm: &State, v: &Val, out: &mut c_double) -> c_int {19 match v {20 Val::Num(n) => {21 *out = *n;22 123 }24 _ => 0,25 }26}27#[no_mangle]28pub extern "C" fn jsonnet_json_extract_bool(_vm: &State, v: &Val) -> c_int {29 match v {30 Val::Bool(false) => 0,31 Val::Bool(true) => 1,32 _ => 2,33 }34}35#[no_mangle]36pub extern "C" fn jsonnet_json_extract_null(_vm: &State, v: &Val) -> c_int {37 match v {38 Val::Null => 1,39 _ => 0,40 }41}