rspack_macros/
lib.rs

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}