replman_derive_impl/
lib.rs

1use 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}