abi_stable/library/c_abi_testing/
c_abi_testing_macros.rs

1macro_rules! check_roundtrip {
2    (
3        $funcs:ident,
4        $initial_int:expr,
5        ($($ret_val:ident=$composite:expr),* $(,)*),
6
7        $ret_fn:ident,
8        $take_fn:ident
9        $(,)*
10    ) => {
11        #[allow(unused_parens)]
12        {
13        let res=($funcs.$ret_fn)($initial_int);
14        let composite=($($composite),*);
15
16        if res!=composite {
17            return Err(make_invalid_cabi_err(composite.clone(),res.clone()));
18        }
19        let ($($ret_val),*)=res.clone();
20        let int=($funcs.$take_fn)($($ret_val),*);
21        if int!=$initial_int {
22            return Err(make_invalid_cabi_err(
23                (composite.clone(),$initial_int),
24                (res.clone(),int),
25            ));
26        }
27    }}
28}
29
30macro_rules! anon_struct {
31    (
32        $($fname:ident : $fval:expr),*
33        $(,)*
34    ) => {{
35        #[allow(non_camel_case_types)]
36        struct Anonymous<$($fname),*>{
37            $($fname:$fname,)*
38        }
39        Anonymous{
40            $($fname:$fval,)*
41        }
42    }};
43}