git.delta.rocks / jrsonnet / refs/commits / 4a1c9d0032c1

difftreelog

fix(evaluator) add missing intristics: char, encodeUTF8, md5

Лач2020-06-26parent: #a5ca2ae.patch.diff
in: master

3 files changed

modifiedcrates/jsonnet-evaluator/Cargo.tomldiffbeforeafterboth
18closure = "0.3.0"18closure = "0.3.0"
19jsonnet-stdlib = { path = "../jsonnet-stdlib" }19jsonnet-stdlib = { path = "../jsonnet-stdlib" }
20indexmap = "1.4.0"20indexmap = "1.4.0"
21md5 = "0.7.0"
2122
22[dependencies.serde]23[dependencies.serde]
23version = "1.0.114"24version = "1.0.114"
modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
682 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 // faster
686 ("std", "join") => {709 ("std", "join") => {
687 assert_eq!(args.len(), 2);710 assert_eq!(args.len(), 2);
modifiedcrates/jsonnet-evaluator/src/val.rsdiffbeforeafterboth
150 self.assert_type(context, ValType::Str)?;150 self.assert_type(context, ValType::Str)?;
151 Ok(matches_unwrap!(self.unwrap_if_lazy()?, Val::Str(v), v))151 Ok(matches_unwrap!(self.unwrap_if_lazy()?, Val::Str(v), v))
152 }152 }
153 pub fn try_cast_num(self, context: &'static str) -> Result<f64> {
154 self.assert_type(context, ValType::Num)?;
155 Ok(matches_unwrap!(self.unwrap_if_lazy()?, Val::Num(v), v))
156 }
153 pub fn unwrap_if_lazy(&self) -> Result<Self> {157 pub fn unwrap_if_lazy(&self) -> Result<Self> {
154 Ok(if let Val::Lazy(v) = self {158 Ok(if let Val::Lazy(v) = self {
155 v.evaluate()?.unwrap_if_lazy()?159 v.evaluate()?.unwrap_if_lazy()?