difftreelog
refactor use new object methods
in: master
4 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -144,12 +144,7 @@
0, obj: ty!(object) => Val::Obj;
1, inc_hidden: ty!(boolean) => Val::Bool;
], {
- let mut out = obj.fields_visibility()
- .into_iter()
- .filter(|(_k, v)| *v || inc_hidden)
- .map(|(k, _v)|k)
- .collect::<Vec<_>>();
- out.sort();
+ let out = obj.fields_ex(inc_hidden);
Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().into()))
})
}
@@ -164,12 +159,7 @@
1, f: ty!(string) => Val::Str;
2, inc_hidden: ty!(boolean) => Val::Bool;
], {
- Ok(Val::Bool(
- obj.fields_visibility()
- .into_iter()
- .filter(|(_k, v)| *v || inc_hidden)
- .any(|(k, _v)| *k == *f),
- ))
+ Ok(Val::Bool(obj.has_field_ex(f, inc_hidden)))
})
}
crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate.rs
@@ -245,7 +245,7 @@
new_bindings.fill(bindings);
}
- let mut new_members = HashMap::new();
+ let mut new_members = FxHashMap::default();
for member in members.iter() {
match member {
Member::Field(FieldMember {
@@ -320,7 +320,7 @@
ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?,
ObjBody::ObjComp(obj) => {
let future_this = FutureObjValue::new();
- let mut new_members = HashMap::new();
+ let mut new_members = FxHashMap::default();
for (k, v) in evaluate_comp(
context.clone(),
&|ctx| {
crates/jrsonnet-evaluator/src/integrations/serde.rsdiffbeforeafterboth1use crate::{2 error::{Error::*, LocError, Result},3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,4};5use jrsonnet_parser::Visibility;6use serde_json::{Map, Number, Value};7use std::{8 collections::HashMap,9 convert::{TryFrom, TryInto},10 rc::Rc,11};1213impl TryFrom<&Val> for Value {14 type Error = LocError;15 fn try_from(v: &Val) -> Result<Self> {16 Ok(match v {17 Val::Bool(b) => Self::Bool(*b),18 Val::Null => Self::Null,19 Val::Str(s) => Self::String((s as &str).into()),20 Val::Num(n) => Self::Number(if n.fract() <= f64::EPSILON {21 (*n as i64).into()22 } else {23 Number::from_f64(*n).expect("to json number")24 }),25 Val::Arr(a) => {26 let mut out = Vec::with_capacity(a.len());27 for item in a.iter() {28 out.push((&item?).try_into()?);29 }30 Self::Array(out)31 }32 Val::Obj(o) => {33 let mut out = Map::new();34 for key in o.visible_fields() {35 out.insert(36 (&key as &str).into(),37 (&o.get(key)?.expect("field exists")).try_into()?,38 );39 }40 Self::Object(out)41 }42 Val::Func(_) => throw!(RuntimeError("tried to manifest function".into())),43 })44 }45}4647impl From<&Value> for Val {48 fn from(v: &Value) -> Self {49 match v {50 Value::Null => Self::Null,51 Value::Bool(v) => Self::Bool(*v),52 Value::Number(n) => Self::Num(n.as_f64().expect("as f64")),53 Value::String(s) => Self::Str((s as &str).into()),54 Value::Array(a) => {55 let mut out = Vec::with_capacity(a.len());56 for v in a {57 out.push(LazyVal::new_resolved(v.into()));58 }59 Self::Arr(out.into())60 }61 Value::Object(o) => {62 let mut entries = HashMap::with_capacity(o.len());63 for (k, v) in o {64 entries.insert(65 (k as &str).into(),66 ObjMember {67 add: false,68 visibility: Visibility::Normal,69 invoke: LazyBinding::Bound(LazyVal::new_resolved(v.into())),70 location: None,71 },72 );73 }74 Self::Obj(ObjValue::new(None, Rc::new(entries)))75 }76 }77 }78}1use crate::{2 error::{Error::*, LocError, Result},3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,4};5use jrsonnet_parser::Visibility;6use rustc_hash::FxHasher;7use serde_json::{Map, Number, Value};8use std::{9 collections::HashMap,10 convert::{TryFrom, TryInto},11 hash::BuildHasherDefault,12 rc::Rc,13};1415impl TryFrom<&Val> for Value {16 type Error = LocError;17 fn try_from(v: &Val) -> Result<Self> {18 Ok(match v {19 Val::Bool(b) => Self::Bool(*b),20 Val::Null => Self::Null,21 Val::Str(s) => Self::String((s as &str).into()),22 Val::Num(n) => Self::Number(if n.fract() <= f64::EPSILON {23 (*n as i64).into()24 } else {25 Number::from_f64(*n).expect("to json number")26 }),27 Val::Arr(a) => {28 let mut out = Vec::with_capacity(a.len());29 for item in a.iter() {30 out.push((&item?).try_into()?);31 }32 Self::Array(out)33 }34 Val::Obj(o) => {35 let mut out = Map::new();36 for key in o.fields() {37 out.insert(38 (&key as &str).into(),39 (&o.get(key)?.expect("field exists")).try_into()?,40 );41 }42 Self::Object(out)43 }44 Val::Func(_) => throw!(RuntimeError("tried to manifest function".into())),45 })46 }47}4849impl From<&Value> for Val {50 fn from(v: &Value) -> Self {51 match v {52 Value::Null => Self::Null,53 Value::Bool(v) => Self::Bool(*v),54 Value::Number(n) => Self::Num(n.as_f64().expect("as f64")),55 Value::String(s) => Self::Str((s as &str).into()),56 Value::Array(a) => {57 let mut out = Vec::with_capacity(a.len());58 for v in a {59 out.push(LazyVal::new_resolved(v.into()));60 }61 Self::Arr(out.into())62 }63 Value::Object(o) => {64 let mut entries = HashMap::with_capacity_and_hasher(65 o.len(),66 BuildHasherDefault::<FxHasher>::default(),67 );68 for (k, v) in o {69 entries.insert(70 (k as &str).into(),71 ObjMember {72 add: false,73 visibility: Visibility::Normal,74 invoke: LazyBinding::Bound(LazyVal::new_resolved(v.into())),75 location: None,76 },77 );78 }79 Self::Obj(ObjValue::new(None, Rc::new(entries)))80 }81 }82 }83}crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/val.rs
+++ b/crates/jrsonnet-evaluator/src/val.rs
@@ -395,7 +395,7 @@
Self::Obj(obj) => obj,
_ => throw!(MultiManifestOutputIsNotAObject),
};
- let keys = obj.visible_fields();
+ let keys = obj.fields();
let mut out = Vec::with_capacity(keys.len());
for key in keys {
let value = obj
@@ -588,8 +588,8 @@
if ObjValue::ptr_eq(a, b) {
return Ok(true);
}
- let fields = a.visible_fields();
- if fields != b.visible_fields() {
+ let fields = a.fields();
+ if fields != b.fields() {
return Ok(false);
}
for field in fields {