use proc_macro2::TokenStream; 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_quote, Data, DeriveInput, Error, Result, Token}; use wasmtime_component_util::{DiscriminantSize, FlagsSize}; mod kw { syn::custom_keyword!(record); syn::custom_keyword!(variant); syn::custom_keyword!(flags); syn::custom_keyword!(name); } #[derive(Debug, Copy, Clone)] pub enum VariantStyle { Variant, Enum, } 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", }) } } #[derive(Debug, Copy, Clone)] enum Style { Record, Variant(VariantStyle), } fn find_style(input: &DeriveInput) -> Result