dynamo_runtime/
pipeline.rs1use serde::{Deserialize, Serialize};
7
8mod nodes;
9pub use nodes::{
10 Operator, PipelineNode, PipelineOperator, SegmentSink, SegmentSource, Service, ServiceBackend,
11 ServiceFrontend, Sink, Source,
12};
13
14pub mod context;
15pub mod error;
16pub mod network;
17pub use network::egress::addressed_router::{AddressedPushRouter, AddressedRequest};
18pub use network::egress::push_router::{PushRouter, RouterMode, WorkerLoadMonitor};
19pub mod registry;
20
21pub use crate::engine::{
22 self as engine, AsyncEngine, AsyncEngineContext, AsyncEngineContextProvider, Data, DataStream,
23 Engine, EngineStream, EngineUnary, RequestStream, ResponseStream, async_trait,
24};
25pub use anyhow::Error;
26pub use context::Context;
27pub use error::{PipelineError, PipelineErrorExt, TwoPartCodecError};
28
29pub type SingleIn<T> = Context<T>;
32
33pub type ManyIn<T> = EngineStream<T>;
45
46pub type SingleOut<T> = EngineUnary<T>;
48
49pub type ManyOut<T> = EngineStream<T>;
51
52pub type ServiceEngine<T, U> = Engine<T, U, Error>;
53
54pub type UnaryEngine<T, U> = ServiceEngine<SingleIn<T>, SingleOut<U>>;
56
57pub type ClientStreamingEngine<T, U> = ServiceEngine<ManyIn<T>, SingleOut<U>>;
61
62pub type ServerStreamingEngine<T, U> = ServiceEngine<SingleIn<T>, ManyOut<U>>;
64
65pub type BidirectionalStreamingEngine<T, U> = ServiceEngine<ManyIn<T>, ManyOut<U>>;
68
69pub trait AsyncTransportEngine<T: Data + PipelineIO, U: Data + PipelineIO>:
70 AsyncEngine<T, U, Error> + Send + Sync + 'static
71{
72}
73
74mod sealed {
77 use super::*;
78
79 #[allow(dead_code)]
80 pub struct Token;
81
82 pub trait Connectable {
83 type DataType: Data;
84 }
85
86 impl<T: Data> Connectable for Context<T> {
87 type DataType = T;
88 }
89 impl<T: Data> Connectable for EngineUnary<T> {
90 type DataType = T;
91 }
92 impl<T: Data> Connectable for EngineStream<T> {
93 type DataType = T;
94 }
95}
96
97pub trait PipelineIO: sealed::Connectable + AsyncEngineContextProvider + 'static {
98 fn id(&self) -> String;
99}
100
101impl<T: Data> PipelineIO for Context<T> {
102 fn id(&self) -> String {
103 self.id().to_string()
104 }
105}
106impl<T: Data> PipelineIO for EngineUnary<T> {
107 fn id(&self) -> String {
108 self.context().id().to_string()
109 }
110}
111impl<T: Data> PipelineIO for EngineStream<T> {
112 fn id(&self) -> String {
113 self.context().id().to_string()
114 }
115}
116
117#[derive(Serialize, Deserialize, Debug, Clone)]
118pub struct Event {
119 pub id: String,
120}