use proc_macro2::{Literal, TokenStream, TokenTree}; use quote::{format_ident, quote}; use std::collections::HashSet; use std::fmt; use syn::parse::{Parse, ParseStream}; use syn::punctuated::Punctuated; use syn::{braced, parse_macro_input, parse_quote, Data, DeriveInput, Error, Result, Token}; #[derive(Debug, Copy, Clone)] enum VariantStyle { Variant, Enum, Union, } impl fmt::Display for VariantStyle { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str(match self { Self::Variant => "variant", Self::Enum => "enum", Self::Union => "union", }) } } #[derive(Debug, Copy, Clone)] enum Style { Record, Variant(VariantStyle), } fn find_style(input: &DeriveInput) -> Result