use proc_macro2::TokenStream;
use quote::quote;
use syn::{Fields, Variant};
pub fn wildcard_pattern(variant: &Variant) -> TokenStream {
let name = &variant.ident;
match &variant.fields {
Fields::Unit => quote!(Self::#name),
Fields::Unnamed(_) => quote!(Self::#name(..)),
Fields::Named(_) => quote!(Self::#name { .. }),
}
}
pub fn representative(variant: &Variant) -> TokenStream {
let name = &variant.ident;
match &variant.fields {
Fields::Unit => quote!(Self::#name),
Fields::Unnamed(fields) => {
let defaults = fields
.unnamed
.iter()
.map(|_| quote!(::core::default::Default::default()));
quote!(Self::#name( #(#defaults),* ))
}
Fields::Named(fields) => {
let inits = fields.named.iter().map(|f| {
let ident = f.ident.as_ref().expect("named field has an identifier");
quote!(#ident: ::core::default::Default::default())
});
quote!(Self::#name { #(#inits),* })
}
}
}