summaryrefslogtreecommitdiff
path: root/mingling_macros/src/renderer.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-05 20:33:57 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-05 20:33:57 +0800
commitb6876f9df6e3119331fac01c0bc954ca9f3c798b (patch)
tree030301c8d434d51fa386e9a5fff77bce5899733b /mingling_macros/src/renderer.rs
parentb41e201e554c4ba5ad6f1e09ce58dd3d10b6a635 (diff)
Add general renderer support with serialization formats
Diffstat (limited to 'mingling_macros/src/renderer.rs')
-rw-r--r--mingling_macros/src/renderer.rs21
1 files changed, 21 insertions, 0 deletions
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! {