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 error;
11
12#[proc_macro]
13pub fn expand(input: TokenStream) -> TokenStream {
14    expand::expand(ExpandContext::new(), input).unwrap_or_else(identity)
15}
16
17#[proc_macro_attribute]
18pub fn using(args: TokenStream, item: TokenStream) -> TokenStream {
19    import::using(args.into(), item.into()).unwrap_or_else(identity).into()
20}
21
22#[proc_macro]
23pub fn using_fn(input: TokenStream) -> TokenStream {
24    let mut i = input.into_iter();
25    let proc_macro::TokenTree::Group(g) = i.next().unwrap() else {panic!()};
26    let args = g.stream();
27    let proc_macro::TokenTree::Group(g) = i.next().unwrap() else {panic!()};
28    let item = g.stream();
29    import::using(args.into(), item.into()).unwrap_or_else(identity).into()
30}