diff options
Diffstat (limited to 'syn-mid/examples/const_fn/lib.rs')
-rw-r--r-- | syn-mid/examples/const_fn/lib.rs | 31 |
1 files changed, 0 insertions, 31 deletions
diff --git a/syn-mid/examples/const_fn/lib.rs b/syn-mid/examples/const_fn/lib.rs deleted file mode 100644 index 29255f2..0000000 --- a/syn-mid/examples/const_fn/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![warn(rust_2018_idioms)] - -extern crate proc_macro; - -use proc_macro::TokenStream; -use proc_macro2::TokenStream as TokenStream2; -use quote::quote; -use syn_mid::ItemFn; - -/// An attribute for easy generation of a const function with conditional compilations. -#[proc_macro_attribute] -pub fn const_fn(args: TokenStream, function: TokenStream) -> TokenStream { - assert!(!args.is_empty(), "requires an argument"); - - let mut function = syn::parse_macro_input!(function as ItemFn); - let mut const_function = function.clone(); - - if function.constness.is_some() { - function.constness = None; - } else { - const_function.constness = Some(Default::default()); - } - - let args = TokenStream2::from(args); - TokenStream::from(quote! { - #[cfg(not(#args))] - #function - #[cfg(#args)] - #const_function - }) -} |