git.delta.rocks / jrsonnet / refs/commits / 773438d8aef3

difftreelog

feat accept plain functions for std.native outputs

Yaroslav Bolyukin2023-08-13parent: #027693d.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
237 /// Used for `std.extVar`237 /// Used for `std.extVar`
238 pub ext_vars: HashMap<IStr, TlaArg>,238 pub ext_vars: HashMap<IStr, TlaArg>,
239 /// Used for `std.native`239 /// Used for `std.native`
240 pub ext_natives: HashMap<IStr, Cc<TraceBox<dyn Builtin>>>,240 pub ext_natives: HashMap<IStr, FuncVal>,
241 /// Used for `std.trace`241 /// Used for `std.trace`
242 pub trace_printer: Box<dyn TracePrinter>,242 pub trace_printer: Box<dyn TracePrinter>,
243 /// Used for `std.thisFile`243 /// Used for `std.thisFile`
addedtests/tests/std_native.rsdiffbeforeafterboth
--- /dev/null
+++ b/tests/tests/std_native.rs
@@ -0,0 +1,21 @@
+use jrsonnet_evaluator::{function::builtin, trace::PathResolver, State};
+use jrsonnet_stdlib::ContextInitializer;
+
+#[builtin]
+fn example_native(a: u32, b: u32) -> u32 {
+	a + b
+}
+
+#[test]
+fn std_native() {
+	let state = State::default();
+	let std = ContextInitializer::new(state.clone(), PathResolver::Absolute);
+	std.add_native("example", example_native::INST);
+	state.set_context_initializer(std);
+
+	assert!(state
+		.evaluate_snippet("test", "std.native('example')(1, 3) == 4")
+		.unwrap()
+		.as_bool()
+		.expect("boolean output"));
+}