Skip to main content

expanda_macros/
lib.rs

1use std::convert::identity;
2
3use proc_macro::TokenStream;
4
5use crate::expand::ExpandContext;
6
7mod expand;
8mod literal;
9mod declare;
10mod error;
11mod util;
12
13#[proc_macro]
14pub fn expand(input: TokenStream) -> TokenStream {
15    expand::expand(ExpandContext::new(), input).unwrap_or_else(identity)
16}
17
18#[proc_macro_attribute]
19pub fn expand_attr(input: TokenStream, item: TokenStream) -> TokenStream {
20    match expand::expand(ExpandContext::new(), input) {
21        Ok(attrs) => TokenStream::from_iter([attrs, item]),
22        Err(error) => error,
23    }
24}
25
26#[proc_macro_attribute]
27pub fn declare_item(args: TokenStream, item: TokenStream) -> TokenStream {
28    declare::declare_item(args, item).unwrap_or_else(identity)
29}