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, $t: ty, 1) => {
9        fn wrapped_func(args: &Vec<$t>) -> $t {
10            $func(args[0]).unwrap()
11        }
12    };
13    ($func:expr, $t: ty, 2) => {
14        fn wrapped_func(args: &Vec<$t>) -> $t {
15            $func(args[0], args[1]).unwrap()
16        }
17    };
18    ($func:expr, $t: ty, 3) => {
19        fn wrapped_func(args: &Vec<$t>) -> $t {
20            let ans = $func(args[0], args[1], args[2]).unwrap_or_else(|e| {
21                println!("{}: {}, {}, {}", e, args[0], args[1], args[2]);
22                panic!()
23            });
24            if ans.is_nan() {
25                println!("{}, {}, {}", args[0], args[1], args[2]);
26                panic!("NAN")
27            }
28            ans
29        }
30    };
31    ($func:expr, $t: ty, 4) => {
32        fn wrapped_func(args: &Vec<$t>) -> $t {
33            $func(args[0], args[1], args[2], args[3]).unwrap()
34        }
35    };
36    ($func:expr, $t: ty, $_:expr) => {
37        fn wrapped_func(_args: &Vec<$t>) -> $t {
38            panic!("Unsupported number of arguments")
39        }
40    };
41}