git.delta.rocks / jrsonnet / refs/commits / 6194e7ed0738

difftreelog

fix(evaluator) handle visibility for objectFieldsEx

Лач2020-06-10parent: #1dbd15d.patch.diff
in: master

1 file changed

modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
423 match evaluate(context, expr)? {423 match evaluate(context, expr)? {
424 Val::Str(n) => Val::Num(n.chars().count() as f64),424 Val::Str(n) => Val::Num(n.chars().count() as f64),
425 Val::Arr(i) => Val::Num(i.len() as f64),425 Val::Arr(i) => Val::Num(i.len() as f64),
426 Val::Obj(o) => Val::Num(o.fields().len() as f64),426 Val::Obj(o) => Val::Num(
427 o.fields_visibility()
428 .into_iter()
429 .filter(|(_k, v)| *v)
430 .count() as f64,
431 ),
427 v => panic!("can't get length of {:?}", v),432 v => panic!("can't get length of {:?}", v),
428 }433 }
472 // object, includeHidden477 // object, includeHidden
473 ("std", "objectFieldsEx") => {478 ("std", "objectFieldsEx") => {
474 assert_eq!(args.len(), 2);479 assert_eq!(args.len(), 2);
475 if let (Val::Obj(body), Val::Bool(_include_hidden)) = (480 if let (Val::Obj(body), Val::Bool(include_hidden)) = (
476 evaluate(context.clone(), &args[0].1)?,481 evaluate(context.clone(), &args[0].1)?,
477 evaluate(context, &args[1].1)?,482 evaluate(context, &args[1].1)?,
478 ) {483 ) {
479 // TODO: handle visibility (_include_hidden)
480 Val::Arr(body.fields().into_iter().map(Val::Str).collect())484 Val::Arr(
485 body.fields_visibility()
486 .into_iter()
487 .filter(|(_k, v)| *v || include_hidden)
488 .map(|(k, _v)| Val::Str(k))
489 .collect(),
490 )
481 } else {491 } else {