difftreelog
feat(evaluator) index errors
in: master
2 files changed
crates/jsonnet-evaluator/src/error.rsdiffbeforeafterboth--- a/crates/jsonnet-evaluator/src/error.rs
+++ b/crates/jsonnet-evaluator/src/error.rs
@@ -16,6 +16,10 @@
FieldMustBeStringGot(ValType),
+ AttemptedIndexAnArrayWithString(String),
+ ValueIndexMustBeTypeGot(ValType, ValType, ValType),
+ CantIndexInto(ValType),
+
RuntimeError(String),
StackOverflow,
FractionalIndex,
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) => {