pub trait Function: PartialReflect + Debug {
// Required methods
fn info(&self) -> &FunctionInfo;
fn reflect_call<'a>(&self, args: ArgList<'a>) -> FunctionResult<'a>;
fn clone_dynamic(&self) -> DynamicFunction<'static>;
// Provided methods
fn name(&self) -> Option<&Cow<'static, str>> { ... }
fn arg_count(&self) -> usize { ... }
}
Available on crate feature
functions
only.Expand description
A trait used to power function-like operations via reflection.
This trait allows types to be called like regular functions
with Reflect
-based arguments and return values.
By default, this trait is currently only implemented for DynamicFunction
,
however, it is possible to implement this trait for custom function-like types.
§Example
fn add(a: i32, b: i32) -> i32 {
a + b
}
let func: Box<dyn Function> = Box::new(add.into_function());
let args = ArgList::new().push_owned(25_i32).push_owned(75_i32);
let value = func.reflect_call(args).unwrap().unwrap_owned();
assert_eq!(value.try_take::<i32>().unwrap(), 100);
Required Methods§
Sourcefn info(&self) -> &FunctionInfo
fn info(&self) -> &FunctionInfo
The FunctionInfo
for this function.
Sourcefn reflect_call<'a>(&self, args: ArgList<'a>) -> FunctionResult<'a>
fn reflect_call<'a>(&self, args: ArgList<'a>) -> FunctionResult<'a>
Call this function with the given arguments.
Sourcefn clone_dynamic(&self) -> DynamicFunction<'static>
fn clone_dynamic(&self) -> DynamicFunction<'static>
Clone this function into a DynamicFunction
.
Provided Methods§
Sourcefn name(&self) -> Option<&Cow<'static, str>>
fn name(&self) -> Option<&Cow<'static, str>>
The name of the function, if any.
For DynamicFunctions
created using IntoFunction
,
the default name will always be the full path to the function as returned by std::any::type_name
,
unless the function is a closure, anonymous function, or function pointer,
in which case the name will be None
.