1use proc_macro::TokenStream;
2use quote::quote;
3
4mod derive_partial_config;
5mod derive_transactional;
6
7mod internals {
8 pub mod ast;
9 pub mod attr;
10 pub mod ctxt;
11 pub mod symbol;
12}
13
14#[proc_macro_derive(PartialConfig, attributes(partial, important))]
15pub fn derive_partial_config(input: TokenStream) -> TokenStream {
16 let input = syn::parse_macro_input!(input as syn::DeriveInput);
17 derive_partial_config::impl_derive(input)
18 .unwrap_or_else(to_compile_errors)
19 .into()
20}
21
22#[proc_macro_derive(Transactional, attributes(tx))]
23pub fn derive_transactional(input: TokenStream) -> TokenStream {
24 let input = syn::parse_macro_input!(input as syn::DeriveInput);
25 derive_transactional::impl_transactional(input)
26 .unwrap_or_else(|e| e.to_compile_error())
27 .into()
28}
29fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
30 let compile_errors = errors.iter().map(syn::Error::to_compile_error);
31 quote!(#(#compile_errors)*)
32}