1use std::{error::Error, fmt::Debug};
2
3use crate::{
4 par_sink::{DistributedSink, ParallelSink}, par_stream::{DistributedStream, ParallelStream}
5};
6
7pub trait Source: Clone + Debug {
8 type Item;
9 type Error: Error;
10
11 type ParStream: ParallelStream<Item = Result<Self::Item, Self::Error>>;
12 type DistStream: DistributedStream<Item = Result<Self::Item, Self::Error>>;
13
14 fn par_stream(self) -> Self::ParStream;
15 fn dist_stream(self) -> Self::DistStream;
16}
17
18pub trait Destination: Clone + Debug {
19 type Item;
20 type Error: Error;
21
22 type ParSink: ParallelSink<Self::Item>;
23 type DistSink: DistributedSink<Self::Item>;
24
25 fn par_sink(self) -> Self::ParSink;
26 fn dist_sink(self) -> Self::DistSink;
27}