aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src/lib.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-29 16:33:13 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-29 16:33:13 +0800
commit376ed696ec2ff676a22bafa44c63e2c6fe606647 (patch)
treec8c30fbf054f9dd50eb858386d208f9147e20dbc /mingling_macros/src/lib.rs
parent4fb83212cefa1a7818d8531fdfe937db10203471 (diff)
Use small integer repr for gen_program! enum
Remove the default __FallBack variant and Debug derive from pack types.
Diffstat (limited to 'mingling_macros/src/lib.rs')
-rw-r--r--mingling_macros/src/lib.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs
index 8ba028b..a8b3b15 100644
--- a/mingling_macros/src/lib.rs
+++ b/mingling_macros/src/lib.rs
@@ -346,19 +346,27 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream {
.map(|s| syn::parse_str::<proc_macro2::TokenStream>(s).unwrap())
.collect();
+ let num_variants = packed_types.len();
+ let repr_type = if num_variants <= u8::MAX as usize {
+ quote! { u8 }
+ } else if num_variants <= u16::MAX as usize {
+ quote! { u16 }
+ } else if num_variants <= u32::MAX as usize {
+ quote! { u32 }
+ } else {
+ quote! { u128 }
+ };
+
let expanded = quote! {
- #[derive(Debug, Default, PartialEq, Eq, Clone)]
- #[repr(u32)]
+ #[derive(Debug, PartialEq, Eq, Clone)]
+ #[repr(#repr_type)]
pub enum #name {
- #[default]
- __FallBack,
#(#packed_types),*
}
impl ::std::fmt::Display for #name {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
match self {
- #name::__FallBack => write!(f, "__FallBack"),
#(#name::#packed_types => write!(f, stringify!(#packed_types)),)*
}
}