diff --git a/crates/component-macro/src/lib.rs b/crates/component-macro/src/lib.rs index 4e1abe6c03..b956c9e318 100644 --- a/crates/component-macro/src/lib.rs +++ b/crates/component-macro/src/lib.rs @@ -1,16 +1,32 @@ use proc_macro2::{Literal, TokenStream, TokenTree}; use quote::{format_ident, quote}; use std::collections::HashSet; +use std::fmt; use syn::{parse_macro_input, parse_quote, Data, DeriveInput, Error, Result}; -#[derive(Debug)] -enum Style { - Record, +#[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