plux_rs/function/
macros.rs

1#[macro_export]
2macro_rules! function_call {
3	($function: ident, $($args:expr), +) => {
4		$function.call(&[$($args.into()), +])
5	};
6	($function: ident) => {
7		$function.call(&[])
8	};
9}
10
11#[test]
12fn run() {
13    use crate::{
14        function::{Arg, DynamicFunction, Function, FunctionOutput},
15        variable::VariableType,
16    };
17
18    // Создание функции
19    let func = DynamicFunction::new(
20        "add",
21        vec![
22            Arg::new("a", VariableType::I32),
23            Arg::new("b", VariableType::I32),
24        ],
25        Some(Arg::new("c", VariableType::I32)),
26        |args| -> FunctionOutput {
27            let a = args[0].parse_ref::<i32>();
28            let b = args[1].parse_ref::<i32>();
29
30            let c = a + b;
31
32            println!("{} + {} = {}", a, b, c);
33
34            Ok(Some(c.into()))
35        },
36    );
37
38    // Запуск функции
39    let c = function_call!(func, 1, 2);
40
41    assert!(c.is_ok());
42    assert_eq!(c.unwrap(), Some(3.into()));
43}