replman_derive_impl/
lib.rs1use help_method::derive_help_method;
2use parse_method::derive_parse_method;
3use proc_macro2::TokenStream;
4use quote::quote;
5use syn::DeriveInput;
6
7use crate::enum_attributes::EnumAttributes;
8
9mod common;
10mod enum_attributes;
11mod field_attributes;
12mod help_method;
13mod parse_method;
14mod variant_attributes;
15
16pub fn derive_repl_cmd_impl(input: DeriveInput) -> TokenStream {
17 let ty = &input.ident;
18
19 let attrs = EnumAttributes::extract(&input.attrs);
20
21 let data_enum = match &input.data {
22 syn::Data::Enum(data_enum) => data_enum,
23 _ => panic!("Can only derive ReplCmd for enums"),
24 };
25
26 let help_impl = derive_help_method(data_enum, &attrs);
27 let parse_impl = derive_parse_method(data_enum, &attrs);
28
29 let output = quote! {
30 impl ReplCmd for #ty {
31 #help_impl
32 #parse_impl
33 }
34 };
35
36 output
37}