more_convert_derive_internal/
enum_array.rs1use proc_macro2::TokenStream;
2
3use crate::require_enum;
4
5pub fn derive_enum_array(input: syn::DeriveInput) -> syn::Result<TokenStream> {
6 let variants = require_enum(&input)?;
7 let ident = &input.ident;
8 let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
9
10 let variants = variants.iter().map(|f| &f.ident).collect::<Vec<_>>();
11 let count = variants.len();
12
13 let token = quote::quote! {
14 impl #impl_generics #ident #ty_generics #where_clause {
15 pub const COUNT: usize = #count;
16 pub const VARIANTS: &[Self] = &[#(Self::#variants),*];
17 }
18 };
19
20 Ok(token)
21}