aboutsummaryrefslogtreecommitdiff
path: root/mingling_macros/src/chain.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-15 12:43:32 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-15 12:43:32 +0800
commitf029a51c1dd308ff8271c2be37d0fdc053552310 (patch)
tree30704c833fe8ade5ea3bb1c0f71d286d37f013d8 /mingling_macros/src/chain.rs
parent5a60cb2edf9d9c6db19f74d27033febbd5abfbd9 (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.rs7
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()
}