difftreelog
refactor use new object methods
in: master
4 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth144 0, obj: ty!(object) => Val::Obj;144 0, obj: ty!(object) => Val::Obj;145 1, inc_hidden: ty!(boolean) => Val::Bool;145 1, inc_hidden: ty!(boolean) => Val::Bool;146 ], {146 ], {147 let mut out = obj.fields_visibility()147 let out = obj.fields_ex(inc_hidden);148 .into_iter()149 .filter(|(_k, v)| *v || inc_hidden)150 .map(|(k, _v)|k)151 .collect::<Vec<_>>();152 out.sort();153 Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().into()))148 Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().into()))154 })149 })155}150}164 1, f: ty!(string) => Val::Str;159 1, f: ty!(string) => Val::Str;165 2, inc_hidden: ty!(boolean) => Val::Bool;160 2, inc_hidden: ty!(boolean) => Val::Bool;166 ], {161 ], {167 Ok(Val::Bool(162 Ok(Val::Bool(obj.has_field_ex(f, inc_hidden)))168 obj.fields_visibility()169 .into_iter()170 .filter(|(_k, v)| *v || inc_hidden)171 .any(|(k, _v)| *k == *f),172 ))173 })163 })174}164}crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth245 new_bindings.fill(bindings);245 new_bindings.fill(bindings);246 }246 }247247248 let mut new_members = HashMap::new();248 let mut new_members = FxHashMap::default();249 for member in members.iter() {249 for member in members.iter() {250 match member {250 match member {251 Member::Field(FieldMember {251 Member::Field(FieldMember {320 ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?,320 ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?,321 ObjBody::ObjComp(obj) => {321 ObjBody::ObjComp(obj) => {322 let future_this = FutureObjValue::new();322 let future_this = FutureObjValue::new();323 let mut new_members = HashMap::new();323 let mut new_members = FxHashMap::default();324 for (k, v) in evaluate_comp(324 for (k, v) in evaluate_comp(325 context.clone(),325 context.clone(),326 &|ctx| {326 &|ctx| {crates/jrsonnet-evaluator/src/integrations/serde.rsdiffbeforeafterboth3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,4};4};5use jrsonnet_parser::Visibility;5use jrsonnet_parser::Visibility;6use rustc_hash::FxHasher;6use serde_json::{Map, Number, Value};7use serde_json::{Map, Number, Value};7use std::{8use std::{8 collections::HashMap,9 collections::HashMap,9 convert::{TryFrom, TryInto},10 convert::{TryFrom, TryInto},11 hash::BuildHasherDefault,10 rc::Rc,12 rc::Rc,11};13};121431 }33 }32 Val::Obj(o) => {34 Val::Obj(o) => {33 let mut out = Map::new();35 let mut out = Map::new();34 for key in o.visible_fields() {36 for key in o.fields() {35 out.insert(37 out.insert(36 (&key as &str).into(),38 (&key as &str).into(),37 (&o.get(key)?.expect("field exists")).try_into()?,39 (&o.get(key)?.expect("field exists")).try_into()?,59 Self::Arr(out.into())61 Self::Arr(out.into())60 }62 }61 Value::Object(o) => {63 Value::Object(o) => {62 let mut entries = HashMap::with_capacity(o.len());64 let mut entries = HashMap::with_capacity_and_hasher(65 o.len(),66 BuildHasherDefault::<FxHasher>::default(),67 );63 for (k, v) in o {68 for (k, v) in o {64 entries.insert(69 entries.insert(crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth395 Self::Obj(obj) => obj,395 Self::Obj(obj) => obj,396 _ => throw!(MultiManifestOutputIsNotAObject),396 _ => throw!(MultiManifestOutputIsNotAObject),397 };397 };398 let keys = obj.visible_fields();398 let keys = obj.fields();399 let mut out = Vec::with_capacity(keys.len());399 let mut out = Vec::with_capacity(keys.len());400 for key in keys {400 for key in keys {401 let value = obj401 let value = obj588 if ObjValue::ptr_eq(a, b) {588 if ObjValue::ptr_eq(a, b) {589 return Ok(true);589 return Ok(true);590 }590 }591 let fields = a.visible_fields();591 let fields = a.fields();592 if fields != b.visible_fields() {592 if fields != b.fields() {593 return Ok(false);593 return Ok(false);594 }594 }595 for field in fields {595 for field in fields {