Skip to main content

harmos_sdk/operations/
lifecycle.rs

1/* ***
2 *
3 * Harmos
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * ***
8 */
9
10/* === Modules === */
11
12/* === Re-Exports === */
13
14/* === Imports === */
15
16// Standard Library Imports
17use std::{future::Future, pin::Pin, sync::Arc};
18// Third Party Imports
19use harmos_domain::model::operations::lifecycle::Action;
20// Local Imports
21use super::{ExecutionContext, access::AccessError};
22
23/* === Constants === */
24
25/* === Macros === */
26
27/* === Type Aliases === */
28
29pub type Transition<'a> = Pin<Box<dyn Future<Output = Result<(), AccessError>> + Send + 'a>>;
30
31/* === Structs === */
32
33pub struct LifecycleAccess(pub Arc<dyn PluginLifecycle>);
34
35/* === Enums === */
36
37/* === Traits === */
38
39pub 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/* === Implementations === */
48
49/* === Public Functions === */
50
51/* === Private Functions === */
52
53/* === Tests === */