1use proc_macro::TokenStream;
2
3mod util;
4
5mod make;
6#[proc_macro_attribute]
7pub fn make(attr: TokenStream, item: TokenStream) -> TokenStream {
8 make::run(attr.into(), item.into()).unwrap_or_else(|err| err.into_compile_error()).into()
9}
10
11mod fill;
12#[proc_macro_attribute]
13pub fn fill(attr: TokenStream, item: TokenStream) -> TokenStream {
14 fill::run(attr.into(), item.into()).unwrap_or_else(|err| err.into_compile_error()).into()
15}
16
17mod derive;
18#[proc_macro_attribute]
19pub fn derive(attr: TokenStream, item: TokenStream) -> TokenStream {
20 derive::run(attr.into(), item.into()).unwrap_or_else(|err| err.into_compile_error()).into()
21}
22
23macro_rules! fillers {
24 ($dir:ident $completer_filler:ident: $($names:ident = $feature:literal,)*) => {
25 mod $dir {
26 $(
27 #[cfg(feature = $feature)]
28 pub(super) mod $names;
29 )*
30 }
31
32 $(
33 #[cfg(feature = $feature)]
34 #[proc_macro]
35 pub fn $names(input: TokenStream) -> TokenStream {
36 portrait_framework::$completer_filler(input, $dir::$names::Generator)
37 }
38 )*
39 }
40}
41
42fillers! { derive_fillers completer_derive_filler:
43 derive_delegate = "derive-delegate-filler",
44}
45
46fillers! { impl_fillers completer_impl_filler:
47 default = "default-filler",
48 delegate = "delegate-filler",
49 log = "log-filler",
50}