harmos_sdk/operations/
lifecycle.rs1use std::{future::Future, pin::Pin, sync::Arc};
18use harmos_domain::model::operations::lifecycle::Action;
20use super::{ExecutionContext, access::AccessError};
22
23pub type Transition<'a> = Pin<Box<dyn Future<Output = Result<(), AccessError>> + Send + 'a>>;
30
31pub struct LifecycleAccess(pub Arc<dyn PluginLifecycle>);
34
35pub trait PluginLifecycle: Send + Sync {
40 fn begin(self: Arc<Self>, action: Action) -> Box<dyn LifecycleInstance>;
41}
42pub trait LifecycleInstance: Send {
43 fn run<'a>(&'a mut self, context: ExecutionContext, config: &'a [u8], generation: &'a [u8], assignments: &'a [u8]) -> Transition<'a>;
44 fn cleanup(&mut self) -> Transition<'_>;
45}
46
47