difftreelog
feat(bindings) object append
in: master
1 file changed
bindings/jsonnet/src/lib.rsdiffbeforeafterboth157pub extern "C" fn jsonnet_json_array_append(_vm: &EvaluationState, arr: &mut Val, val: &Val) {157pub extern "C" fn jsonnet_json_array_append(_vm: &EvaluationState, arr: &mut Val, val: &Val) {158 match arr {158 match arr {159 Val::Arr(old) => {159 Val::Arr(old) => {160 // TODO: Mutate array, instead of recreating them160 let mut new = Vec::new();161 let mut new = Vec::new();161 new.extend(old.iter().cloned());162 new.extend(old.iter().cloned());162 new.push(val.clone());163 new.push(val.clone());171 Box::new(Val::Obj(ObjValue::new_empty()))172 Box::new(Val::Obj(ObjValue::new_empty()))172}173}173174175/// # Safety176///177/// This function is safe if passed name is ok174#[no_mangle]178#[no_mangle]175pub extern "C" fn jsonnet_json_object_append(179pub unsafe extern "C" fn jsonnet_json_object_append(176 _vm: &EvaluationState,180 _vm: &EvaluationState,177 _obj: &mut Val,181 obj: &mut Val,178 _name: *const c_char,182 name: *const c_char,179 _val: &Val,183 val: &Val,180) {184) {185 match obj {186 Val::Obj(old) => {187 let mut new = BTreeMap::new();188 new.insert(189 CStr::from_ptr(name).to_str().unwrap().into(),190 ObjMember {191 add: false,192 visibility: Visibility::Normal,193 invoke: LazyBinding::Bound(LazyVal::new_resolved(val.clone())),194 },195 );196 let new_obj = ObjValue::new(Some(old.clone()), Rc::new(new));197 *obj = Val::Obj(new_obj);198 }181 todo!()199 _ => panic!("should receive array"),200 }182}201}183202184/// # Safety203/// # Safety