enum-tools 0.5.5

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

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

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

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

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

        let Derive {
            repr, ident_enum, ..
        } = derive;

        quote! {
            impl ::core::convert::From<#ident_enum> for #repr {
                #[inline]
                fn from(value: #ident_enum) -> Self {
                    value as #repr
                }
            }
        }
    }
}