1#[cfg(not(flux_sysroot))]
2use attr_dummy as attr_impl;
3#[cfg(flux_sysroot)]
4use attr_sysroot as attr_impl;
5use proc_macro::TokenStream;
6
7#[proc_macro_attribute]
8pub fn alias(attr: TokenStream, tokens: TokenStream) -> TokenStream {
9 attr_impl::alias(attr, tokens)
10}
11
12#[proc_macro_attribute]
13pub fn sig(attr: TokenStream, tokens: TokenStream) -> TokenStream {
14 attr_impl::sig(attr, tokens)
15}
16
17#[proc_macro_attribute]
18pub fn spec(attr: TokenStream, tokens: TokenStream) -> TokenStream {
19 attr_impl::spec(attr, tokens)
20}
21
22#[proc_macro_attribute]
23pub fn specs(attr: TokenStream, tokens: TokenStream) -> TokenStream {
24 attr_impl::specs(attr, tokens)
25}
26
27#[proc_macro_attribute]
28pub fn qualifiers(attr: TokenStream, tokens: TokenStream) -> TokenStream {
29 attr_impl::qualifiers(attr, tokens)
30}
31
32#[proc_macro_attribute]
33pub fn reveal(attr: TokenStream, tokens: TokenStream) -> TokenStream {
34 attr_impl::reveal(attr, tokens)
35}
36
37#[proc_macro_attribute]
38pub fn refined_by(attr: TokenStream, tokens: TokenStream) -> TokenStream {
39 attr_impl::refined_by(attr, tokens)
40}
41
42#[proc_macro_attribute]
43pub fn invariant(attr: TokenStream, tokens: TokenStream) -> TokenStream {
44 attr_impl::invariant(attr, tokens)
45}
46
47#[proc_macro_attribute]
48pub fn constant(attr: TokenStream, tokens: TokenStream) -> TokenStream {
49 attr_impl::constant(attr, tokens)
50}
51
52#[proc_macro_attribute]
53pub fn opaque(attr: TokenStream, tokens: TokenStream) -> TokenStream {
54 attr_impl::opaque(attr, tokens)
55}
56
57#[proc_macro_attribute]
58pub fn reflect(attr: TokenStream, tokens: TokenStream) -> TokenStream {
59 attr_impl::reflect(attr, tokens)
60}
61
62#[proc_macro_attribute]
63pub fn opts(attr: TokenStream, tokens: TokenStream) -> TokenStream {
64 attr_impl::opts(attr, tokens)
65}
66
67#[proc_macro_attribute]
68pub fn trusted(attr: TokenStream, tokens: TokenStream) -> TokenStream {
69 attr_impl::trusted(attr, tokens)
70}
71
72#[proc_macro_attribute]
73pub fn trusted_impl(attr: TokenStream, tokens: TokenStream) -> TokenStream {
74 attr_impl::trusted_impl(attr, tokens)
75}
76
77#[proc_macro_attribute]
78pub fn proven_externally(attr: TokenStream, tokens: TokenStream) -> TokenStream {
79 attr_impl::proven_externally(attr, tokens)
80}
81
82#[proc_macro_attribute]
83pub fn generics(attr: TokenStream, tokens: TokenStream) -> TokenStream {
84 attr_impl::generics(attr, tokens)
85}
86
87#[proc_macro_attribute]
88pub fn assoc(attr: TokenStream, tokens: TokenStream) -> TokenStream {
89 attr_impl::assoc(attr, tokens)
90}
91
92#[proc_macro]
93pub fn flux(tokens: TokenStream) -> TokenStream {
94 flux_attrs_impl::flux(tokens.into()).into()
95}
96
97#[proc_macro]
98pub fn defs(tokens: TokenStream) -> TokenStream {
99 attr_impl::defs(tokens)
100}
101
102#[proc_macro_attribute]
103pub fn extern_spec(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
104 attr_impl::extern_spec(attrs, tokens)
105}
106
107#[proc_macro_attribute]
108pub fn ignore(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
109 attr_impl::ignore(attrs, tokens)
110}
111
112#[proc_macro_attribute]
113pub fn should_fail(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
114 attr_impl::should_fail(attrs, tokens)
115}
116
117#[proc_macro_attribute]
118pub fn no_panic(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
119 attr_impl::no_panic(attrs, tokens)
120}
121
122#[proc_macro_attribute]
123pub fn no_panic_if(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
124 attr_impl::no_panic_if(attrs, tokens)
125}
126
127#[proc_macro_attribute]
128pub fn reft(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
129 attr_impl::reft(attrs, tokens)
130}
131
132#[cfg(flux_sysroot)]
133mod attr_sysroot {
134 use super::*;
135
136 pub fn extern_spec(attr: TokenStream, tokens: TokenStream) -> TokenStream {
137 flux_attrs_impl::extern_spec(attr.into(), tokens.into()).into()
138 }
139
140 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
141 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
142 }
143
144 pub fn defs(tokens: TokenStream) -> TokenStream {
145 flux_attrs_impl::defs(tokens.into()).into()
146 }
147
148 macro_rules! flux_tool_attrs {
149 ($($name:ident),+ $(,)?) => {
150 $(
151 pub fn $name(attr: TokenStream, item: TokenStream) -> TokenStream {
152 flux_attrs_impl::flux_tool_item_attr(stringify!($name), attr.into(), item.into()).into()
153 }
154 )*
155 };
156 }
157
158 flux_tool_attrs!(
159 alias,
160 spec,
161 specs,
162 sig,
163 qualifiers,
164 reveal,
165 constant,
166 invariant,
167 opaque,
168 reflect,
169 opts,
170 trusted,
171 trusted_impl,
172 proven_externally,
173 generics,
174 assoc,
175 ignore,
176 should_fail,
177 reft,
178 no_panic,
179 no_panic_if,
180 );
181}
182
183#[cfg(not(flux_sysroot))]
184mod attr_dummy {
185 use super::*;
186
187 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
188 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
189 }
190
191 pub fn defs(_tokens: TokenStream) -> TokenStream {
192 TokenStream::new()
193 }
194
195 pub fn extern_spec(_attrs: TokenStream, _tokens: TokenStream) -> TokenStream {
196 TokenStream::new()
197 }
198
199 macro_rules! no_op {
200 ($($name:ident),+ $(,)?) => {
201 $(
202 pub fn $name(_attr: TokenStream, item: TokenStream) -> TokenStream {
203 item
204 }
205 )+
206 };
207 }
208
209 no_op!(
210 alias,
211 spec,
212 specs,
213 sig,
214 qualifiers,
215 reveal,
216 invariant,
217 constant,
218 opaque,
219 reflect,
220 opts,
221 trusted,
222 trusted_impl,
223 proven_externally,
224 generics,
225 assoc,
226 ignore,
227 should_fail,
228 no_panic,
229 no_panic_if,
230 reft,
231 );
232}