From 25a164f74c011e6e78846f226cbd7a8bd87db92f Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 29 Mar 2026 21:33:04 +0800 Subject: Replace ChainProcess type alias with enum --- mingling/src/any.rs | 64 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) (limited to 'mingling/src/any.rs') diff --git a/mingling/src/any.rs b/mingling/src/any.rs index 204a7e3..1bce96a 100644 --- a/mingling/src/any.rs +++ b/mingling/src/any.rs @@ -3,8 +3,6 @@ use serde::Serialize; use crate::error::ChainProcessError; -pub type ChainProcess = Result; - #[derive(Debug)] pub struct AnyOutput { inner: Box, @@ -48,12 +46,12 @@ impl AnyOutput { /// Route the output to the next Chain pub fn route_chain(self) -> ChainProcess { - Ok(self) + ChainProcess::Ok((self, Next::Chain)) } /// Route the output to the Renderer, ending execution pub fn route_renderer(self) -> ChainProcess { - Err(ChainProcessError::Broken(self)) + ChainProcess::Ok((self, Next::Renderer)) } } @@ -70,3 +68,61 @@ impl std::ops::DerefMut for AnyOutput { &mut *self.inner } } + +pub enum ChainProcess { + Ok((AnyOutput, Next)), + Err(ChainProcessError), +} + +pub enum Next { + Chain, + Renderer, +} + +impl ChainProcess { + pub fn is_next(&self) -> bool { + matches!(self, Self::Ok(_)) + } + + pub fn is_err(&self) -> bool { + matches!(self, Self::Err(_)) + } + + pub fn next(&self) -> Option<&Next> { + match self { + Self::Ok((_, next)) => Some(next), + Self::Err(_) => None, + } + } + + pub fn err(&self) -> Option<&ChainProcessError> { + match self { + Self::Ok(_) => None, + Self::Err(err) => Some(err), + } + } + + pub fn unwrap(self) -> (AnyOutput, Next) { + match self { + Self::Ok(tuple) => tuple, + Self::Err(_) => panic!("called `ChainProcess2::unwrap()` on an `Error` value"), + } + } + + pub fn unwrap_or(self, default: (AnyOutput, Next)) -> (AnyOutput, Next) { + match self { + Self::Ok(tuple) => tuple, + Self::Err(_) => default, + } + } + + pub fn unwrap_or_else(self, f: F) -> (AnyOutput, Next) + where + F: FnOnce(ChainProcessError) -> (AnyOutput, Next), + { + match self { + Self::Ok(tuple) => tuple, + Self::Err(err) => f(err), + } + } +} -- cgit