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 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}