Skip to main content

tycho_util_proc/
lib.rs

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}