From 6980fbf2f9fb4c599d8dc6ff549a8b3288eb24e9 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 17 Aug 2026 02:29:30 +0800 Subject: refactor!: remove dynamic dispatcher registration API Dispatchers are now always registered at compile time, removing the `with_dispatcher` / `with_dispatchers` methods and the `PathfinderConfig` API. The `dispatch_tree` feature now only controls the matching strategy (trie vs linear list). --- mingling_core/src/program/collection.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'mingling_core/src/program/collection.rs') diff --git a/mingling_core/src/program/collection.rs b/mingling_core/src/program/collection.rs index 438b800..c571887 100644 --- a/mingling_core/src/program/collection.rs +++ b/mingling_core/src/program/collection.rs @@ -2,7 +2,6 @@ #[cfg(feature = "async")] use std::pin::Pin; -#[cfg(feature = "dispatch_tree")] use crate::Dispatcher; use crate::{AnyOutput, ChainProcess, Grouped, RenderResult}; @@ -34,26 +33,19 @@ pub trait ProgramCollect { /// you can use the `empty_result!()` macro to create this type ResultEmpty: Grouped; - /// Use a prefix tree to quickly match arguments and dispatch to an Entry - #[cfg(feature = "dispatch_tree")] - fn dispatch_args( - raw: &[String], - ) -> Result, crate::error::ProgramInternalExecuteError>; - - #[cfg(not(feature = "dispatch_tree"))] - /// Use a prefix tree to quickly match arguments and dispatch to an Entry + /// Dispatch the raw user arguments to an Entry. + /// + /// The concrete matching strategy (trie or linear list) is generated by + /// `gen_program!` and selected by the `dispatch_tree` feature. /// /// # Errors /// /// Returns an error if the program fails to execute the given arguments. fn dispatch_args( - _raw: &[String], - ) -> Result, crate::error::ProgramInternalExecuteError> { - unreachable!() - } + raw: &[String], + ) -> Result, crate::error::ProgramInternalExecuteError>; /// Get all registered dispatcher names from the program - #[cfg(feature = "dispatch_tree")] fn get_nodes() -> Vec<(String, &'static (dyn Dispatcher + Send + Sync))>; /// Build an [`AnyOutput`](./struct.AnyOutput.html) to indicate that a renderer was not found -- cgit