enum-tools 0.5.5

Automatically derive functions and trait implementations for enums
Documentation
use crate::generator::names::Names;
use crate::generator::Derive;
use proc_macro2::TokenStream;
use quote::quote;

#[derive(Default)]
pub(crate) struct FeatureTableName {
    pub(crate) enabled: bool,
}

impl FeatureTableName {
    pub(crate) fn check(&mut self) {}

    pub(crate) fn generate(self, derive: &Derive, names: &Names) -> TokenStream {
        if !self.enabled {
            return TokenStream::new();
        }

        let Derive { num_values, .. } = derive;
        let Names {
            ident_table_name, ..
        } = names;

        let table = derive
            .values
            .iter()
            .map(|(_, (_, name))| {
                quote! {#name}
            })
            .collect::<Vec<_>>();

        quote! {
            const #ident_table_name:[&'static str; #num_values] = [#(#table),*];
        }
    }
}