From 0cb8ccca6e4fc2b433f6a2492b2cdfd96751ca40 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 1 Apr 2026 16:30:10 +0800 Subject: 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. --- mingling_core/src/program.rs | 2 ++ mingling_core/src/program/exec.rs | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'mingling_core') diff --git a/mingling_core/src/program.rs b/mingling_core/src/program.rs index 1c8c0b4..ffba17e 100644 --- a/mingling_core/src/program.rs +++ b/mingling_core/src/program.rs @@ -88,6 +88,8 @@ where pub trait ProgramCollect { type Enum: Display; + fn build_renderer_not_found(member_id: Self::Enum) -> AnyOutput; + fn build_dispatcher_not_found(args: Vec) -> AnyOutput; fn render(any: AnyOutput, r: &mut RenderResult); fn do_chain( any: AnyOutput, diff --git a/mingling_core/src/program/exec.rs b/mingling_core/src/program/exec.rs index cdbb2b0..bf025fd 100644 --- a/mingling_core/src/program/exec.rs +++ b/mingling_core/src/program/exec.rs @@ -28,7 +28,7 @@ where } Err(ProgramInternalExecuteError::DispatcherNotFound) => { // No matching Dispatcher is found - return Err(ProgramInternalExecuteError::DispatcherNotFound); + current = C::build_dispatcher_not_found(program.args); } Err(e) => return Err(e), }; @@ -51,8 +51,7 @@ where } // No renderer exists else { - let renderer_name = current.member_id.to_string(); - return Err(ProgramInternalExecuteError::RendererNotFound(renderer_name)); + C::build_renderer_not_found(current.member_id) } }; } -- cgit