aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src/func/suggest_enum.rs
blob: c8e9db00100f9a4934e8cc1e2977044deb82bc2f (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
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()
}