aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src/func/suggest_enum.rs
blob: 7a9ab9b3b44365a0cb7d09c1c0330df722dc1b9b (plain) (blame)
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
// Doc Not Optimize
use proc_macro::TokenStream;
use quote::quote;
use syn::parse_macro_input;

pub(crate) fn suggest_enum(input: TokenStream) -> TokenStream {
    let enum_type = parse_macro_input!(input as syn::Type);

    let expanded = quote! {{
        let mut enum_suggest = ::mingling::Suggest::new();
        for (name, desc) in <#enum_type>::enums() {
            if desc.is_empty() {
                enum_suggest.insert(::mingling::SuggestItem::new(name.to_string()));
            } else {
                enum_suggest.insert(::mingling::SuggestItem::new_with_desc(
                    name.to_string(),
                    desc.to_string(),
                ));
            }
        }
        enum_suggest
    }};

    expanded.into()
}