git.delta.rocks / jrsonnet / refs/commits / 765a4d39e770

difftreelog

test fix NativeCallback usage

Yaroslav Bolyukin2021-06-05parent: #46d0b23.patch.diff
in: master

1 file changed

modifiedcrates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth
489pub mod tests {489pub mod tests {
490 use super::Val;490 use super::Val;
491 use crate::{error::Error::*, primitive_equals, EvaluationState};491 use crate::{
492 error::Error::*, native::NativeCallbackHandler, primitive_equals, EvaluationState,
493 };
494 use gc::Gc;
492 use jrsonnet_interner::IStr;495 use jrsonnet_interner::IStr;
493 use jrsonnet_parser::*;496 use jrsonnet_parser::*;
494 use std::{path::PathBuf, rc::Rc};497 use std::{path::PathBuf, rc::Rc};
922 let evaluator = EvaluationState::default();925 let evaluator = EvaluationState::default();
923926
924 evaluator.with_stdlib();927 evaluator.with_stdlib();
925 evaluator.settings_mut().ext_natives.insert(928
926 "native_add".into(),929 #[derive(gc::Trace, gc::Finalize)]
927 Rc::new(NativeCallback::new(930 struct NativeAdd;
928 ParamsDesc(Rc::new(vec![931 impl NativeCallbackHandler for NativeAdd {
929 Param("a".into(), None),
930 Param("b".into(), None),
931 ])),
932 |caller, args| {932 fn call(&self, from: Option<Rc<PathBuf>>, args: &[Val]) -> crate::error::Result<Val> {
933 assert_eq!(933 assert_eq!(
934 caller.unwrap(),934 from.unwrap(),
935 Rc::new(PathBuf::from("native_caller.jsonnet"))935 Rc::new(PathBuf::from("native_caller.jsonnet"))
936 );936 );
937 match (&args[0], &args[1]) {937 match (&args[0], &args[1]) {
938 (Val::Num(a), Val::Num(b)) => Ok(Val::Num(a + b)),938 (Val::Num(a), Val::Num(b)) => Ok(Val::Num(a + b)),
939 (_, _) => unreachable!(),939 (_, _) => unreachable!(),
940 }940 }
941 },941 }
942 )),942 }
943 );943 evaluator.settings_mut().ext_natives.insert(
944 "native_add".into(),
945 Gc::new(NativeCallback::new(
946 ParamsDesc(Rc::new(vec![
947 Param("a".into(), None),
948 Param("b".into(), None),
949 ])),
950 Box::new(NativeAdd),
951 )),
952 );
944 evaluator.evaluate_snippet_raw(953 evaluator.evaluate_snippet_raw(
945 Rc::new(PathBuf::from("native_caller.jsonnet")),954 Rc::new(PathBuf::from("native_caller.jsonnet")),
946 "std.assertEqual(std.native(\"native_add\")(1, 2), 3)".into(),955 "std.assertEqual(std.native(\"native_add\")(1, 2), 3)".into(),