difftreelog
feat(evaluator) index errors
in: master
2 files changed
crates/jsonnet-evaluator/src/error.rsdiffbeforeafterboth161617 FieldMustBeStringGot(ValType),17 FieldMustBeStringGot(ValType),1819 AttemptedIndexAnArrayWithString(String),20 ValueIndexMustBeTypeGot(ValType, ValType, ValType),21 CantIndexInto(ValType),182219 RuntimeError(String),23 RuntimeError(String),20 StackOverflow,24 StackOverflow,crates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth421 create_error(crate::Error::NoSuchField(s))?421 create_error(crate::Error::NoSuchField(s))?422 }422 }423 }423 }424 (Val::Obj(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(425 ValType::Obj,426 ValType::Str,427 n.value_type()?,428 ))?,429424 (Val::Arr(v), Val::Num(n)) => {430 (Val::Arr(v), Val::Num(n)) => {425 if n.fract() > f64::EPSILON {431 if n.fract() > f64::EPSILON {430 .clone()436 .clone()431 .unwrap_if_lazy()?437 .unwrap_if_lazy()?432 }438 }439 (Val::Arr(_), Val::Str(n)) => {440 create_error(crate::Error::AttemptedIndexAnArrayWithString(n))?441 }442 (Val::Arr(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(443 ValType::Arr,444 ValType::Num,445 n.value_type()?,446 ))?,447433 (Val::Str(s), Val::Num(n)) => {448 (Val::Str(s), Val::Num(n)) => {434 Val::Str(s.chars().skip(n as usize).take(1).collect())449 Val::Str(s.chars().skip(n as usize).take(1).collect())435 }450 }451 (Val::Str(_), n) => create_error(crate::Error::ValueIndexMustBeTypeGot(452 ValType::Str,453 ValType::Num,454 n.value_type()?,455 ))?,456436 (v, i) => todo!("not implemented: {:?}[{:?}]", v, i.unwrap_if_lazy()),457 (v, _) => create_error(crate::Error::CantIndexInto(v.value_type()?))?,437 }458 }438 }459 }439 LocalExpr(bindings, returned) => {460 LocalExpr(bindings, returned) => {