1mod cacheable;
2mod cacheable_dyn;
3mod hook;
4mod merge;
5mod plugin;
6mod runtime_module;
7mod source_map_config;
8
9#[proc_macro_attribute]
10pub fn impl_runtime_module(
11 args: proc_macro::TokenStream,
12 tokens: proc_macro::TokenStream,
13) -> proc_macro::TokenStream {
14 runtime_module::impl_runtime_module(args, tokens)
15}
16
17#[proc_macro_attribute]
18pub fn impl_source_map_config(
19 args: proc_macro::TokenStream,
20 tokens: proc_macro::TokenStream,
21) -> proc_macro::TokenStream {
22 source_map_config::impl_source_map_config(args, tokens)
23}
24
25#[proc_macro_attribute]
26pub fn plugin(
27 _args: proc_macro::TokenStream,
28 tokens: proc_macro::TokenStream,
29) -> proc_macro::TokenStream {
30 let item = syn::parse_macro_input!(tokens as syn::ItemStruct);
31 plugin::expand_struct(item)
32}
33
34#[proc_macro_attribute]
35pub fn plugin_hook(
36 args: proc_macro::TokenStream,
37 tokens: proc_macro::TokenStream,
38) -> proc_macro::TokenStream {
39 let args = syn::parse_macro_input!(args as plugin::HookArgs);
40 let input = syn::parse_macro_input!(tokens as syn::ItemFn);
41 plugin::expand_fn(args, input)
42}
43
44#[proc_macro]
45pub fn define_hook(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
46 let input = syn::parse_macro_input!(input as hook::DefineHookInput);
47 match input.expand() {
48 syn::Result::Ok(tt) => tt,
49 syn::Result::Err(err) => err.to_compile_error(),
50 }
51 .into()
52}
53
54#[proc_macro_derive(MergeFrom, attributes(merge_from))]
55pub fn merge_from_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
56 let input = syn::parse_macro_input!(input as syn::DeriveInput);
57 let output = merge::expand_merge_from_derive(input);
58 match output {
59 syn::Result::Ok(tt) => tt,
60 syn::Result::Err(err) => err.to_compile_error(),
61 }
62 .into()
63}
64
65#[proc_macro_attribute]
66pub fn enable_cacheable(
67 args: proc_macro::TokenStream,
68 tokens: proc_macro::TokenStream,
69) -> proc_macro::TokenStream {
70 cacheable::cacheable(args, tokens)
71}
72
73#[proc_macro_attribute]
74pub fn disable_cacheable(
75 args: proc_macro::TokenStream,
76 tokens: proc_macro::TokenStream,
77) -> proc_macro::TokenStream {
78 cacheable::disable_cacheable(args, tokens)
79}
80
81#[proc_macro_attribute]
82pub fn enable_cacheable_dyn(
83 _args: proc_macro::TokenStream,
84 tokens: proc_macro::TokenStream,
85) -> proc_macro::TokenStream {
86 let input = syn::parse_macro_input!(tokens as syn::Item);
87
88 match input {
89 syn::Item::Trait(input) => cacheable_dyn::impl_trait(input),
90 syn::Item::Impl(input) => cacheable_dyn::impl_impl(input),
91 _ => panic!("expect Trait or Impl"),
92 }
93}
94
95#[proc_macro_attribute]
96pub fn disable_cacheable_dyn(
97 _args: proc_macro::TokenStream,
98 tokens: proc_macro::TokenStream,
99) -> proc_macro::TokenStream {
100 cacheable_dyn::disable_cacheable_dyn(tokens)
101}