Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_scene/src/macro_utils.rs
30635 views
1
/// This is used by the [`bsn!`](crate::bsn) macro to generate compile-time only references to symbols. Currently this is used
2
/// to add IDE support for nested type names, as it allows us to pass the input Ident from the input to the output code.
3
pub const fn touch_type<T>() {}
4
5
/// Creates a tuple that will be nested after it passes 11 items.
6
/// When there is a single item, it is _not_ wrapped in a tuple.
7
/// This is implemented in a way that creates the smallest number of trait impls possible.
8
#[macro_export]
9
#[doc(hidden)]
10
macro_rules! auto_nest_tuple {
11
// direct expansion
12
() => { () };
13
($a:expr) => {
14
$a
15
};
16
($a:expr, $b:expr) => {
17
(
18
$a,
19
$b,
20
)
21
};
22
($a:expr, $b:expr, $c:expr) => {
23
(
24
$a,
25
$b,
26
$c,
27
)
28
};
29
($a:expr, $b:expr, $c:expr, $d:expr) => {
30
(
31
$a,
32
$b,
33
$c,
34
$d,
35
)
36
};
37
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr) => {
38
(
39
$a,
40
$b,
41
$c,
42
$d,
43
$e,
44
)
45
};
46
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr) => {
47
(
48
$a,
49
$b,
50
$c,
51
$d,
52
$e,
53
$f,
54
)
55
};
56
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr) => {
57
(
58
$a,
59
$b,
60
$c,
61
$d,
62
$e,
63
$f,
64
$g,
65
)
66
};
67
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr) => {
68
(
69
$a,
70
$b,
71
$c,
72
$d,
73
$e,
74
$f,
75
$g,
76
$h,
77
)
78
};
79
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr) => {
80
(
81
$a,
82
$b,
83
$c,
84
$d,
85
$e,
86
$f,
87
$g,
88
$h,
89
$i,
90
)
91
};
92
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr) => {
93
(
94
$a,
95
$b,
96
$c,
97
$d,
98
$e,
99
$f,
100
$g,
101
$h,
102
$i,
103
$j,
104
)
105
};
106
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr, $k:expr) => {
107
(
108
$a,
109
$b,
110
$c,
111
$d,
112
$e,
113
$f,
114
$g,
115
$h,
116
$i,
117
$j,
118
$k,
119
)
120
};
121
122
// recursive expansion
123
(
124
$a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr,
125
$g:expr, $h:expr, $i:expr, $j:expr, $k:expr, $($rest:expr),*
126
) => {
127
(
128
$a,
129
$b,
130
$c,
131
$d,
132
$e,
133
$f,
134
$g,
135
$h,
136
$i,
137
$j,
138
$k,
139
$crate::auto_nest_tuple!($($rest),*)
140
)
141
};
142
}
143
144
/// This is used by the [`bsn!`](crate::bsn) derive to work around [this Rust limitation](https://github.com/rust-lang/rust/issues/86935).
145
/// A fix is implemented and on track for stabilization. If it is ever implemented, we can remove this.
146
pub type PathResolveHelper<T> = T;
147
148