Skip to main content

harmos_sdk/operations/
instances.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::operations::instance::{Id, Status};
20// Local Imports
21
22/* === Constants === */
23
24/* === Macros === */
25
26/* === Type Aliases === */
27
28pub type Changed<'a> = Pin<Box<dyn Future<Output = bool> + Send + 'a>>;
29
30/* === Structs === */
31
32#[derive(Clone)]
33pub struct InstanceAccess(pub Arc<dyn Instances>);
34
35/* === Enums === */
36
37/* === Traits === */
38
39pub trait Instances: Send + Sync {
40    fn owned(&self, id: Id) -> Option<Arc<dyn InstanceControl>>;
41}
42pub trait InstanceControl: Send + Sync {
43    fn status(&self) -> Status;
44    fn cancel(&self);
45    fn subscribe(&self) -> Box<dyn InstanceChanges>;
46}
47pub trait InstanceChanges: Send {
48    fn current(&mut self) -> Status;
49    fn changed(&mut self) -> Changed<'_>;
50}
51
52/* === Implementations === */
53
54/* === Public Functions === */
55
56/* === Private Functions === */
57
58/* === Tests === */