1pub trait Arity {
3 const N: usize;
5}
6macro_rules! define_arity_marker {
7 ($(($name:ident, $n:expr)),+ $(,)?) => {
8 $(
9 #[doc = "Type-level marker for functions with exactly "]
10 #[doc = stringify!($n)]
11 #[doc = " parameters."]
12 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
13 pub struct $name;
14
15 impl Arity for $name {
16 const N: usize = $n;
17 }
18 )+
19 };
20}
21define_arity_marker!(
22 (A0, 0),
23 (A1, 1),
24 (A2, 2),
25 (A3, 3),
26 (A4, 4),
27 (A5, 5),
28 (A6, 6),
29 (A7, 7),
30 (A8, 8),
31 (A9, 9),
32 (A10, 10),
33 (A11, 11),
34 (A12, 12),
35);
36
37#[macro_export]
39macro_rules! arity {
40 (0) => {
41 $crate::marker::A0
42 };
43 (1) => {
44 $crate::marker::A1
45 };
46 (2) => {
47 $crate::marker::A2
48 };
49 (3) => {
50 $crate::marker::A3
51 };
52 (4) => {
53 $crate::marker::A4
54 };
55 (5) => {
56 $crate::marker::A5
57 };
58 (6) => {
59 $crate::marker::A6
60 };
61 (7) => {
62 $crate::marker::A7
63 };
64 (8) => {
65 $crate::marker::A8
66 };
67 (9) => {
68 $crate::marker::A9
69 };
70 (10) => {
71 $crate::marker::A10
72 };
73 (11) => {
74 $crate::marker::A11
75 };
76 (12) => {
77 $crate::marker::A12
78 };
79}