flux_attrs/
lib.rs

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}