ellip_dev_utils/
wrapper.rs

1/*
2 * Ellip is licensed under The 3-Clause BSD, see LICENSE.
3 * Copyright 2025 Sira Pornsiriprasert <code@psira.me>
4 */
5
6#[macro_export]
7macro_rules! func_wrapper {
8    ($func:expr, $n_args: tt) => {
9        func_wrapper!($func, f64, $n_args)
10    };
11    ($func:expr, k,  1) => {
12        fn wrapped_func(args: &Vec<f64>) -> f64 {
13            $func(args[0] * args[0]).unwrap()
14        }
15    };
16    ($func:expr, k, 2) => {
17        fn wrapped_func(args: &Vec<f64>) -> f64 {
18            $func(args[0], args[1] * args[1]).unwrap()
19        }
20    };
21    ($func:expr, k, 3) => {
22        fn wrapped_func(args: &Vec<f64>) -> f64 {
23            $func(args[0], args[1], args[2] * args[2]).unwrap()
24        }
25    };
26    ($func:expr, $t: ty, 1) => {
27        fn wrapped_func(args: &Vec<$t>) -> $t {
28            $func(args[0]).unwrap()
29        }
30    };
31    ($func:expr, $t: ty, 2) => {
32        fn wrapped_func(args: &Vec<$t>) -> $t {
33            $func(args[0], args[1]).unwrap()
34        }
35    };
36    ($func:expr, $t: ty, 3) => {
37        fn wrapped_func(args: &Vec<$t>) -> $t {
38            $func(args[0], args[1], args[2]).unwrap()
39        }
40    };
41    ($func:expr, $t: ty, 4) => {
42        fn wrapped_func(args: &Vec<$t>) -> $t {
43            $func(args[0], args[1], args[2], args[3]).unwrap()
44        }
45    };
46    ($func:expr, $t: ty, $_:expr) => {
47        fn wrapped_func(_args: &Vec<$t>) -> $t {
48            panic!("Unsupported number of arguments")
49        }
50    };
51}