difftreelog
fix(evaluator) add missing intristics: char, encodeUTF8, md5
in: master
3 files changed
crates/jsonnet-evaluator/Cargo.tomldiffbeforeafterboth--- a/crates/jsonnet-evaluator/Cargo.toml
+++ b/crates/jsonnet-evaluator/Cargo.toml
@@ -18,6 +18,7 @@
closure = "0.3.0"
jsonnet-stdlib = { path = "../jsonnet-stdlib" }
indexmap = "1.4.0"
+md5 = "0.7.0"
[dependencies.serde]
version = "1.0.114"
crates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth682 panic!("bad filter call");682 panic!("bad filter call");683 }683 }684 }684 }685 ("std", "char") => {686 assert_eq!(args.len(), 1);687 let ch = evaluate(context, &args[0].1)?688 .unwrap_if_lazy()?689 .try_cast_num("std.char first argument")?;690 let mut out = String::new();691 out.push(std::char::from_u32(ch as u32).unwrap());692 Val::Str(out.into())693 }694 ("std", "encodeUTF8") => {695 assert_eq!(args.len(), 1);696 let s = evaluate(context, &args[0].1)?697 .unwrap_if_lazy()?698 .try_cast_str("std.encodeUTF8 first argument")?;699 Val::Arr(Rc::new(s.bytes().map(|b| Val::Num(b as f64)).collect()))700 }701 ("std", "md5") => {702 assert_eq!(args.len(), 1);703 let s = evaluate(context, &args[0].1)?704 .unwrap_if_lazy()?705 .try_cast_str("std.md5 first argument")?;706 Val::Str(format!("{:x}", md5::compute(s.as_bytes())).into())707 }685 // faster708 // faster686 ("std", "join") => {709 ("std", "join") => {687 assert_eq!(args.len(), 2);710 assert_eq!(args.len(), 2);crates/jsonnet-evaluator/src/val.rsdiffbeforeafterboth--- a/crates/jsonnet-evaluator/src/val.rs
+++ b/crates/jsonnet-evaluator/src/val.rs
@@ -150,6 +150,10 @@
self.assert_type(context, ValType::Str)?;
Ok(matches_unwrap!(self.unwrap_if_lazy()?, Val::Str(v), v))
}
+ pub fn try_cast_num(self, context: &'static str) -> Result<f64> {
+ self.assert_type(context, ValType::Num)?;
+ Ok(matches_unwrap!(self.unwrap_if_lazy()?, Val::Num(v), v))
+ }
pub fn unwrap_if_lazy(&self) -> Result<Self> {
Ok(if let Val::Lazy(v) = self {
v.evaluate()?.unwrap_if_lazy()?