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}