pub struct RunnableBranch<I: Send + Sync + 'static, O: Send + Sync + 'static> { /* private fields */ }Expand description
A Runnable that routes input to different branches based on conditions.
Conditions are evaluated in order; the first matching branch wins. If no condition matches, the default branch is used.
The input type I must be Clone because the input may need to be
evaluated against multiple conditions before a match is found.
§Example
ⓘ
let branch = RunnableBranch::new(default_handler)
.when_fn(|input: &String| input.len() > 100, long_handler)
.when_fn(|input: &String| input.starts_with('?'), question_handler);Implementations§
Source§impl<I: Clone + Send + Sync + 'static, O: Send + Sync + 'static> RunnableBranch<I, O>
impl<I: Clone + Send + Sync + 'static, O: Send + Sync + 'static> RunnableBranch<I, O>
Sourcepub fn when<R1, R2>(self, condition: R1, branch: R2) -> Self
pub fn when<R1, R2>(self, condition: R1, branch: R2) -> Self
Add a branch with a condition runnable and a branch runnable.
The condition runnable takes I and returns bool.
If the condition returns true, the branch runnable is executed.
Trait Implementations§
Source§impl<I: Clone + Send + Sync + 'static, O: Send + Sync + 'static> Runnable<I, O> for RunnableBranch<I, O>
impl<I: Clone + Send + Sync + 'static, O: Send + Sync + 'static> Runnable<I, O> for RunnableBranch<I, O>
Source§fn invoke<'life0, 'async_trait>(
&'life0 self,
input: I,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<O, LcelError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn invoke<'life0, 'async_trait>(
&'life0 self,
input: I,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<O, LcelError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Evaluate conditions in order, execute the first matching branch. If no condition matches, execute the default.
Source§fn stream<'life0, 'async_trait>(
&'life0 self,
input: I,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<O, LcelError>> + Send>>, LcelError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stream<'life0, 'async_trait>(
&'life0 self,
input: I,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<O, LcelError>> + Send>>, LcelError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stream: invoke and return single-element stream.
Source§fn batch<'life0, 'async_trait>(
&'life0 self,
inputs: Vec<Input>,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Output>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn batch<'life0, 'async_trait>(
&'life0 self,
inputs: Vec<Input>,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Output>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Batch processing - transforms multiple inputs to outputs. Read more
Source§fn transform<'life0, 'async_trait>(
&'life0 self,
input: Pin<Box<dyn Stream<Item = Result<Input, Self::Error>> + Send>>,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<Output, Self::Error>> + Send>>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn transform<'life0, 'async_trait>(
&'life0 self,
input: Pin<Box<dyn Stream<Item = Result<Input, Self::Error>> + Send>>,
config: Option<RunnableConfig>,
) -> Pin<Box<dyn Future<Output = Result<Pin<Box<dyn Stream<Item = Result<Output, Self::Error>> + Send>>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stream-to-stream transformation - the core of LCEL streaming. Read more
Auto Trait Implementations§
impl<I, O> !RefUnwindSafe for RunnableBranch<I, O>
impl<I, O> !UnwindSafe for RunnableBranch<I, O>
impl<I, O> Freeze for RunnableBranch<I, O>
impl<I, O> Send for RunnableBranch<I, O>
impl<I, O> Sync for RunnableBranch<I, O>
impl<I, O> Unpin for RunnableBranch<I, O>
impl<I, O> UnsafeUnpin for RunnableBranch<I, O>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<I, O, R> RunnableExt<I, O> for R
impl<I, O, R> RunnableExt<I, O> for R
Source§fn pipe<O2, R2>(self, other: R2) -> RunnableSequence<Input, O2>
fn pipe<O2, R2>(self, other: R2) -> RunnableSequence<Input, O2>
Pipe the output of this runnable into another runnable. Read more
Source§fn into_sequence(self) -> RunnableSequence<Input, Output>
fn into_sequence(self) -> RunnableSequence<Input, Output>
Create a
RunnableSequence from this runnable as a single step. Read more