diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-15 12:43:32 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-15 12:43:32 +0800 |
| commit | f029a51c1dd308ff8271c2be37d0fdc053552310 (patch) | |
| tree | 30704c833fe8ade5ea3bb1c0f71d286d37f013d8 /mingling_macros/src/chain.rs | |
| parent | 5a60cb2edf9d9c6db19f74d27033febbd5abfbd9 (diff) | |
Add register_type macro and use it in chain and renderer macros
Diffstat (limited to 'mingling_macros/src/chain.rs')
| -rw-r--r-- | mingling_macros/src/chain.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/mingling_macros/src/chain.rs b/mingling_macros/src/chain.rs index f1be091..cf91738 100644 --- a/mingling_macros/src/chain.rs +++ b/mingling_macros/src/chain.rs @@ -122,6 +122,8 @@ pub fn chain_attr(attr: TokenStream, item: TokenStream) -> TokenStream { let pascal_case_name = just_fmt::pascal_case!(fn_name.to_string()); let struct_name = Ident::new(&pascal_case_name, fn_name.span()); + let previous_type_str = previous_type.to_token_stream().to_string(); + // Generate the struct and implementation let expanded = if use_crate_prefix { quote! { @@ -129,6 +131,8 @@ pub fn chain_attr(attr: TokenStream, item: TokenStream) -> TokenStream { #[doc(hidden)] #vis struct #struct_name; + ::mingling::macros::register_type!(#previous_type_str); + impl ::mingling::Chain<ThisProgram> for #struct_name { type Previous = #previous_type; @@ -182,15 +186,12 @@ pub fn chain_attr(attr: TokenStream, item: TokenStream) -> TokenStream { let mut chains = crate::CHAINS.lock().unwrap(); let mut chain_exist = crate::CHAINS_EXIST.lock().unwrap(); - let mut packed_types = crate::PACKED_TYPES.lock().unwrap(); let chain_entry = chain_entry.to_string(); let chain_exist_entry = chain_exist_entry.to_string(); - let previous_type_str = previous_type.to_token_stream().to_string(); chains.insert(chain_entry); chain_exist.insert(chain_exist_entry); - packed_types.insert(previous_type_str); expanded.into() } |
