Skip to main content

rialo_sol_attribute_constant/
lib.rs

1// Copyright (c) Subzero Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4#[allow(unused_extern_crates)]
5extern crate proc_macro;
6
7/// A marker attribute used to mark const values that should be included in the
8/// generated IDL but functionally does nothing.
9#[proc_macro_attribute]
10pub fn constant(
11    _attr: proc_macro::TokenStream,
12    input: proc_macro::TokenStream,
13) -> proc_macro::TokenStream {
14    #[cfg(feature = "idl-build")]
15    {
16        use quote::quote;
17
18        let ts = match syn::parse(input).unwrap() {
19            syn::Item::Const(item) => {
20                let idl_print = rialo_sol_syn::idl::gen_idl_print_fn_constant(&item);
21                quote! {
22                    #item
23                    #idl_print
24                }
25            }
26            item => quote! {#item},
27        };
28
29        return proc_macro::TokenStream::from(quote! {
30            #ts
31        });
32    };
33
34    #[allow(unreachable_code)]
35    input
36}