1use std::convert::identity;
2
3use proc_macro::TokenStream;
4
5use crate::expand::ExpandContext;
6
7mod expand;
8mod import;
9mod error;
10
11#[proc_macro]
12pub fn expand(input: TokenStream) -> TokenStream {
13 expand::expand(ExpandContext::new(), input).unwrap_or_else(identity)
14}
15
16#[proc_macro_attribute]
17pub fn using(args: TokenStream, item: TokenStream) -> TokenStream {
18 import::using(args.into(), item.into()).unwrap_or_else(identity).into()
19}
20
21#[proc_macro]
22pub fn using_fn(input: TokenStream) -> TokenStream {
23 let mut i = input.into_iter();
24 let proc_macro::TokenTree::Group(g) = i.next().unwrap() else {panic!()};
25 let args = g.stream();
26 let proc_macro::TokenTree::Group(g) = i.next().unwrap() else {panic!()};
27 let item = g.stream();
28 import::using(args.into(), item.into()).unwrap_or_else(identity).into()
29}