From 9d491352d161ee629cc47459537344ba0ea4bb35 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 20 Jun 2026 01:11:25 +0800 Subject: Add shared `MockProgramCollect` and conditional `Groupped` bounds Extract duplicate `MockCollect` implementations into a reusable `MockProgramCollect` type. Conditionally require `Serialize` on the `Groupped` trait when the `general_renderer` feature is enabled. --- mingling_core/src/program/collection/mock.rs | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 mingling_core/src/program/collection/mock.rs (limited to 'mingling_core/src/program/collection/mock.rs') diff --git a/mingling_core/src/program/collection/mock.rs b/mingling_core/src/program/collection/mock.rs new file mode 100644 index 0000000..e1b3aa4 --- /dev/null +++ b/mingling_core/src/program/collection/mock.rs @@ -0,0 +1,105 @@ +pub use mock::*; + +mod mock { + #[cfg(feature = "async")] + use std::pin::Pin; + + #[cfg(feature = "dispatch_tree")] + use crate::Dispatcher; + + use crate::{AnyOutput, ChainProcess, Groupped, ProgramCollect, RenderResult}; + + #[cfg(feature = "general_renderer")] + use crate::{GeneralRendererSetting, error::GeneralRendererSerializeError}; + + #[cfg(feature = "comp")] + use crate::{ShellContext, Suggest}; + + #[cfg(feature = "general_renderer")] + use serde::Serialize; + + #[cfg_attr(feature = "general_renderer", derive(Serialize))] + #[allow(unused)] + pub enum MockProgramCollect { + Foo, + Bar, + } + + impl Groupped for MockProgramCollect { + fn member_id() -> MockProgramCollect { + MockProgramCollect::Foo + } + } + + impl ProgramCollect for MockProgramCollect { + type Enum = MockProgramCollect; + type ErrorDispatcherNotFound = MockProgramCollect; + type ErrorRendererNotFound = MockProgramCollect; + type ResultEmpty = MockProgramCollect; + + #[cfg(feature = "dispatch_tree")] + fn dispatch_args_trie( + _raw: &[String], + ) -> Result, crate::error::ProgramInternalExecuteError> { + unreachable!() + } + + #[cfg(feature = "dispatch_tree")] + fn get_nodes() -> Vec<(String, &'static (dyn Dispatcher + Send + Sync))> { + unreachable!() + } + + fn build_renderer_not_found(_member_id: Self::Enum) -> AnyOutput { + unreachable!() + } + + fn build_dispatcher_not_found(_args: Vec) -> AnyOutput { + unreachable!() + } + + fn build_empty_result() -> AnyOutput { + unreachable!() + } + + fn render(_any: AnyOutput, _r: &mut RenderResult) { + unreachable!() + } + + fn render_help(_any: AnyOutput, _r: &mut RenderResult) { + unreachable!() + } + + #[cfg(feature = "async")] + fn do_chain( + _any: AnyOutput, + ) -> Pin> + Send>> { + unreachable!() + } + + #[cfg(not(feature = "async"))] + fn do_chain(_any: AnyOutput) -> ChainProcess { + unreachable!() + } + + #[cfg(feature = "comp")] + fn do_comp(_any: &AnyOutput, _ctx: &ShellContext) -> Suggest { + unreachable!() + } + + fn has_renderer(_any: &AnyOutput) -> bool { + unreachable!() + } + + fn has_chain(_any: &AnyOutput) -> bool { + unreachable!() + } + + #[cfg(feature = "general_renderer")] + fn general_render( + _any: AnyOutput, + _setting: &GeneralRendererSetting, + ) -> Result { + unreachable!() + } + } +} -- cgit