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