git.delta.rocks / jrsonnet / refs/commits / 76b0db1d8913

difftreelog

feat builtin downcasting

Yaroslav Bolyukin2023-02-16parent: #5acdbdb.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-evaluator/src/function/builtin.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/function/builtin.rs
+++ b/crates/jrsonnet-evaluator/src/function/builtin.rs
@@ -1,4 +1,4 @@
-use std::borrow::Cow;
+use std::{any::Any, borrow::Cow};
 
 use jrsonnet_gcmodule::Trace;
 
@@ -25,6 +25,8 @@
 	fn params(&self) -> &[BuiltinParam];
 	/// Call the builtin
 	fn call(&self, ctx: Context, loc: CallLocation<'_>, args: &dyn ArgsLike) -> Result<Val>;
+
+	fn as_any(&self) -> &dyn Any;
 }
 
 pub trait StaticBuiltin: Builtin + Send + Sync
@@ -76,6 +78,10 @@
 			.collect::<Result<Vec<Val>>>()?;
 		self.handler.call(&args)
 	}
+
+	fn as_any(&self) -> &dyn Any {
+		self
+	}
 }
 
 pub trait NativeCallbackHandler: Trace {
modifiedcrates/jrsonnet-macros/src/lib.rsdiffbeforeafterboth
380 let result: #result = #name(#(#pass)*);380 let result: #result = #name(#(#pass)*);
381 <_ as Typed>::into_result(result)381 <_ as Typed>::into_result(result)
382 }382 }
383 fn as_any(&self) -> &dyn ::std::any::Any {
384 self
385 }
383 }386 }
384 };387 };
385 })388 })