pub trait ControlPlane: Send + Sync {
// Required methods
fn topology<'life0, 'life1, 'async_trait>(
&'life0 self,
pipeline: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Topology, String>> + Send + 'async_trait>>
where 'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait;
fn resolve_dataset<'life0, 'life1, 'async_trait>(
&'life0 self,
dataset: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Binding, String>> + Send + 'async_trait>>
where 'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait;
fn heartbeat<'life0, 'life1, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = BuildSignal> + Send + 'async_trait>>
where 'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait;
fn put_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
record: &'life2 Value,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where 'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait;
}Expand description
The host contract. Implementations must be cheap to clone behind an Arc and safe to call from
the engine’s single control task (the task threads never touch it).
Required Methods§
Sourcefn topology<'life0, 'life1, 'async_trait>(
&'life0 self,
pipeline: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Topology, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn topology<'life0, 'life1, 'async_trait>(
&'life0 self,
pipeline: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Topology, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
The pipeline’s stream topology (definition only — the engine parses/validates the steps).
Sourcefn resolve_dataset<'life0, 'life1, 'async_trait>(
&'life0 self,
dataset: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Binding, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn resolve_dataset<'life0, 'life1, 'async_trait>(
&'life0 self,
dataset: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Binding, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Resolve a dataset to its source and sink factories, failing loudly for a dataset the host does not know.
Sourcefn heartbeat<'life0, 'life1, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = BuildSignal> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn heartbeat<'life0, 'life1, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = BuildSignal> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Liveness + control: one round-trip carries both (the echo tells the engine to stop).
Sourcefn put_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
record: &'life2 Value,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn put_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
build_id: &'life1 str,
record: &'life2 Value,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Persist the build record (status, metrics, timestamps). Best-effort; hosts log failures.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".