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 import;
10mod declare;
11mod error;
12mod util;
13
14#[proc_macro]
15pub fn expand(input: TokenStream) -> TokenStream {
16    expand::expand(ExpandContext::new(), input).unwrap_or_else(identity)
17}
18
19#[proc_macro_attribute]
20pub fn expand_attr(input: TokenStream, item: TokenStream) -> TokenStream {
21    match expand::expand(ExpandContext::new(), input) {
22        Ok(attrs) => TokenStream::from_iter([attrs, item]),
23        Err(error) => error,
24    }
25}
26
27#[proc_macro_attribute]
28pub fn using(args: TokenStream, item: TokenStream) -> TokenStream {
29    import::using(args, item).unwrap_or_else(identity)
30}
31
32#[proc_macro_attribute]
33pub fn declare_item(args: TokenStream, item: TokenStream) -> TokenStream {
34    declare::declare_item(args, item).unwrap_or_else(identity)
35}