pub trait ExecutionDriver: Send {
type Primitive: Send;
type Processed: Send;
type Output: Clone + Send + Sync + 'static;
type Error: Clone + Send + Sync + 'static;
Show 15 methods
// Required methods
fn dispatch_primitive<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<(Self::Primitive, StageDisposition), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn reversible_post_process<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
primitive: Self::Primitive,
) -> Pin<Box<dyn Future<Output = Result<(Self::Processed, StageDisposition), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn record_context_ir<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
processed: &'life2 Self::Processed,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn record_ledger<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
processed: &'life2 Self::Processed,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn output_from_processed(
&mut self,
processed: Self::Processed,
) -> Self::Output;
fn observe(
&self,
result: &Result<Self::Output, LifecycleRunError<Self::Error>>,
) -> CompletionObservation;
// Provided methods
fn cancellation_handler(&self) -> Option<CancellationHandler> { ... }
fn identify_caller<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn resolve_workspace<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn resolve_entitlements<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn apply_security_boundaries<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn gather_context_strategy<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn ask_autopilot<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn validate_cached_replay<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<Option<Self::Output>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn checkpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
_output: &'life2 mut Self::Output,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
}Required Associated Types§
type Primitive: Send
type Processed: Send
type Output: Clone + Send + Sync + 'static
type Error: Clone + Send + Sync + 'static
Required Methods§
fn dispatch_primitive<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<(Self::Primitive, StageDisposition), Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reversible_post_process<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
primitive: Self::Primitive,
) -> Pin<Box<dyn Future<Output = Result<(Self::Processed, StageDisposition), Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_context_ir<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
processed: &'life2 Self::Processed,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn record_ledger<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
processed: &'life2 Self::Processed,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn output_from_processed(&mut self, processed: Self::Processed) -> Self::Output
fn observe( &self, result: &Result<Self::Output, LifecycleRunError<Self::Error>>, ) -> CompletionObservation
Provided Methods§
Sourcefn cancellation_handler(&self) -> Option<CancellationHandler>
fn cancellation_handler(&self) -> Option<CancellationHandler>
Retain only observations needed if the in-flight driver future is dropped. The handler and normal ledger stage must share an exactly-once owner.
fn identify_caller<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn resolve_workspace<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn resolve_entitlements<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn apply_security_boundaries<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn gather_context_strategy<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn ask_autopilot<'life0, 'life1, 'async_trait>(
&'life0 mut self,
context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Sourcefn validate_cached_replay<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<Option<Self::Output>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn validate_cached_replay<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
) -> Pin<Box<dyn Future<Output = Result<Option<Self::Output>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Re-run mutable admission policy before returning an idempotent cached result.
fn checkpoint<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_context: &'life1 TaskContext,
_output: &'life2 mut Self::Output,
) -> Pin<Box<dyn Future<Output = Result<StageDisposition, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".