summaryrefslogtreecommitdiff
path: root/mingling_macros/src/lib.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-01 16:30:10 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-01 16:30:10 +0800
commit0cb8ccca6e4fc2b433f6a2492b2cdfd96751ca40 (patch)
tree15b78b8aeb303593202f00ca78124ebeeaf8ab86 /mingling_macros/src/lib.rs
parent3de10ca22cca06c4d9069984d0e66e370a331dde (diff)
Add default error handling methods to ProgramCollect trait
The trait now includes `build_renderer_not_found` and `build_dispatcher_not_found` methods for constructing error outputs. The macro generates implementations that create appropriate error types, removing hardcoded enum variants.
Diffstat (limited to 'mingling_macros/src/lib.rs')
-rw-r--r--mingling_macros/src/lib.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs
index 832b45a..5a32075 100644
--- a/mingling_macros/src/lib.rs
+++ b/mingling_macros/src/lib.rs
@@ -73,7 +73,11 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
parse_macro_input!(input as Ident)
};
- let packed_types = PACKED_TYPES.lock().unwrap().clone();
+ let mut packed_types = PACKED_TYPES.lock().unwrap().clone();
+ packed_types.push("DispatcherNotFound".to_string());
+ packed_types.push("RendererNotFound".to_string());
+ packed_types.sort();
+ packed_types.dedup();
let renderers = RENDERERS.lock().unwrap().clone();
let chains = CHAINS.lock().unwrap().clone();
let renderer_exist = RENDERERS_EXIST.lock().unwrap().clone();
@@ -113,8 +117,6 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
pub enum #name {
#[default]
__FallBack,
- DispatcherNotFound,
- RendererNotFound,
#(#packed_types),*
}
@@ -122,12 +124,6 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
match self {
#name::__FallBack => write!(f, "__FallBack"),
- #name::DispatcherNotFound => {
- write!(f, "DispatcherNotFound")
- }
- #name::RendererNotFound => {
- write!(f, "RendererNotFound")
- }
#(#name::#packed_types => write!(f, stringify!(#packed_types)),)*
}
}
@@ -135,6 +131,12 @@ pub fn gen_program(input: TokenStream) -> TokenStream {
impl ::mingling::ProgramCollect for #name {
type Enum = #name;
+ fn build_renderer_not_found(member_id: Self::Enum) -> ::mingling::AnyOutput<Self::Enum> {
+ ::mingling::AnyOutput::new(RendererNotFound::new(member_id.to_string()))
+ }
+ fn build_dispatcher_not_found(args: Vec<String>) -> ::mingling::AnyOutput<Self::Enum> {
+ ::mingling::AnyOutput::new(DispatcherNotFound::new(args))
+ }
::mingling::__dispatch_program_renderers!(
#(#renderer_tokens)*
);