From b6876f9df6e3119331fac01c0bc954ca9f3c798b Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 5 Apr 2026 20:33:57 +0800 Subject: Add general renderer support with serialization formats --- mingling_macros/src/renderer.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'mingling_macros/src/renderer.rs') diff --git a/mingling_macros/src/renderer.rs b/mingling_macros/src/renderer.rs index 0e32b40..4edac88 100644 --- a/mingling_macros/src/renderer.rs +++ b/mingling_macros/src/renderer.rs @@ -109,14 +109,30 @@ pub fn renderer_attr(item: TokenStream) -> TokenStream { Self::#previous_type => true, }; + #[cfg(feature = "general_renderer")] + let general_renderer_entry = quote! { + Self::#previous_type => { + let raw = any.restore::<#previous_type>().unwrap(); + let mut r = ::mingling::RenderResult::default(); + ::mingling::GeneralRenderer::render(&raw, setting, &mut r)?; + Ok(r) + } + }; + let mut renderers = crate::RENDERERS.lock().unwrap(); let mut renderer_exist = crate::RENDERERS_EXIST.lock().unwrap(); let mut packed_types = crate::PACKED_TYPES.lock().unwrap(); + #[cfg(feature = "general_renderer")] + let mut general_renderers = crate::GENERAL_RENDERERS.lock().unwrap(); + let renderer_entry_str = renderer_entry.to_string(); let renderer_exist_entry_str = renderer_exist_entry.to_string(); let previous_type_str = previous_type.to_token_stream().to_string(); + #[cfg(feature = "general_renderer")] + let general_renderer_entry_str = general_renderer_entry.to_string(); + if !renderers.contains(&renderer_entry_str) { renderers.push(renderer_entry_str); } @@ -129,6 +145,11 @@ pub fn renderer_attr(item: TokenStream) -> TokenStream { packed_types.push(previous_type_str); } + #[cfg(feature = "general_renderer")] + if !general_renderers.contains(&general_renderer_entry_str) { + general_renderers.push(general_renderer_entry_str); + } + // Generate the struct and implementation // We need to create a wrapper function that adds the r parameter let expanded = quote! { -- cgit