Trait Function

Source
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§

Source

fn info(&self) -> &FunctionInfo

The FunctionInfo for this function.

Source

fn reflect_call<'a>(&self, args: ArgList<'a>) -> FunctionResult<'a>

Call this function with the given arguments.

Source

fn clone_dynamic(&self) -> DynamicFunction<'static>

Clone this function into a DynamicFunction.

Provided Methods§

Source

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.

Source

fn arg_count(&self) -> usize

The number of arguments this function accepts.

Implementors§