grafos_stream/
stage.rs

1//! Core stage traits for stream processing pipelines.
2//!
3//! Each trait represents one role in a pipeline:
4//!
5//! - [`Source<T>`] — produces items until exhausted (`None`).
6//! - [`Transform<In, Out>`] — maps an input item to zero or one output items.
7//! - [`Sink<T>`] — consumes items (terminal).
8//! - [`Fold<T, Acc>`] — reduces items into an accumulator (terminal).
9
10use grafos_std::error::FabricError;
11
12/// Produces items for a pipeline.
13///
14/// Returns `Ok(Some(item))` for each available item, `Ok(None)` when
15/// the source is exhausted. Once `None` is returned, subsequent calls
16/// should continue to return `None`.
17pub trait Source<T> {
18    fn next(&mut self) -> Result<Option<T>, FabricError>;
19}
20
21/// Transforms an input item into zero or one output items.
22///
23/// Returns `Ok(Some(out))` to emit an item downstream, or `Ok(None)` to
24/// filter the item out (no output for this input).
25pub trait Transform<In, Out> {
26    fn process(&mut self, item: In) -> Result<Option<Out>, FabricError>;
27}
28
29/// Consumes items (terminal stage).
30pub trait Sink<T> {
31    fn accept(&mut self, item: T) -> Result<(), FabricError>;
32}
33
34/// Reduces items into an accumulator (terminal stage).
35pub trait Fold<T, Acc> {
36    fn fold(&mut self, acc: Acc, item: T) -> Result<Acc, FabricError>;
37}