enum-tools 0.5.5

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

pub(crate) struct FeatureIntoStrTrait {
    pub(crate) enabled: bool,
}

impl FeatureIntoStrTrait {
    pub(crate) fn parse(feature_parser: &mut FeatureParser) -> Self {
        if let Some(params) = feature_parser.get("IntoStr") {
            params.finish(Self { enabled: true })
        } else {
            Self { enabled: false }
        }
    }

    pub(crate) fn check(&mut self, features: &mut Features2) {
        if !self.enabled {
            return;
        }

        features.as_str_fn.enabled = true;
    }

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

        let Derive { ident_enum, .. } = derive;
        let Names { ident_as_str, .. } = names;
        quote! {
            impl ::core::convert::From<#ident_enum> for &'static str {
                #[inline]
                fn from(value: #ident_enum) -> Self {
                    value.#ident_as_str()
                }
            }
        }
    }
}