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 reft(attrs: TokenStream, tokens: TokenStream) -> TokenStream {
119 attr_impl::reft(attrs, tokens)
120}
121
122#[cfg(flux_sysroot)]
123mod attr_sysroot {
124 use super::*;
125
126 pub fn extern_spec(attr: TokenStream, tokens: TokenStream) -> TokenStream {
127 flux_attrs_impl::extern_spec(attr.into(), tokens.into()).into()
128 }
129
130 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
131 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
132 }
133
134 pub fn defs(tokens: TokenStream) -> TokenStream {
135 flux_attrs_impl::defs(tokens.into()).into()
136 }
137
138 macro_rules! flux_tool_attrs {
139 ($($name:ident),+ $(,)?) => {
140 $(
141 pub fn $name(attr: TokenStream, item: TokenStream) -> TokenStream {
142 flux_attrs_impl::flux_tool_item_attr(stringify!($name), attr.into(), item.into()).into()
143 }
144 )*
145 };
146 }
147
148 flux_tool_attrs!(
149 alias,
150 spec,
151 specs,
152 sig,
153 qualifiers,
154 reveal,
155 constant,
156 invariant,
157 opaque,
158 reflect,
159 opts,
160 trusted,
161 trusted_impl,
162 proven_externally,
163 generics,
164 assoc,
165 ignore,
166 should_fail,
167 reft,
168 );
169}
170
171#[cfg(not(flux_sysroot))]
172mod attr_dummy {
173 use super::*;
174
175 pub fn refined_by(attr: TokenStream, item: TokenStream) -> TokenStream {
176 flux_attrs_impl::refined_by(attr.into(), item.into()).into()
177 }
178
179 pub fn defs(_tokens: TokenStream) -> TokenStream {
180 TokenStream::new()
181 }
182
183 pub fn extern_spec(_attrs: TokenStream, _tokens: TokenStream) -> TokenStream {
184 TokenStream::new()
185 }
186
187 macro_rules! no_op {
188 ($($name:ident),+ $(,)?) => {
189 $(
190 pub fn $name(_attr: TokenStream, item: TokenStream) -> TokenStream {
191 item
192 }
193 )+
194 };
195 }
196
197 no_op!(
198 alias,
199 spec,
200 specs,
201 sig,
202 qualifiers,
203 reveal,
204 invariant,
205 constant,
206 opaque,
207 reflect,
208 opts,
209 trusted,
210 trusted_impl,
211 proven_externally,
212 generics,
213 assoc,
214 ignore,
215 should_fail,
216 reft,
217 );
218}