1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mod collect_commands;

use heck::ToKebabCase;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};

#[proc_macro_derive(Event, attributes(tauri_specta))]
pub fn derive_type(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let crate_ref = quote!(tauri_specta);

    let DeriveInput { ident, .. } = parse_macro_input!(input);

    let name = ident.to_string().to_kebab_case();

    quote! {
        impl #crate_ref::Event for #ident {
            const NAME: &'static str = #name;
        }
    }
    .into()
}

#[proc_macro]
pub fn collect_commands(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    collect_commands::proc_macro(input)
}