1mod file;
2mod record;
3
4use crate::contract::{
5 RuntimeActionRequest, RuntimeApplyRequest, RuntimeExecRequest, RuntimeExecResult,
6 RuntimeObservation, RuntimeRemoval,
7};
8use crate::RuntimeResult;
9use async_trait::async_trait;
10
11pub use file::FileRuntimeStateStore;
12pub use record::{
13 RuntimeActionKind, RuntimeRequestKind, RuntimeRequestReceipt, RuntimeRequestState,
14 RuntimeStateReservation, RuntimeUnitRecord,
15};
16
17#[cfg(test)]
18mod transition_tests;
19
20pub trait RuntimeOperationLease: Send {}
23
24#[async_trait]
25pub trait RuntimeStateStore: Send + Sync {
26 async fn acquire_operation_lease(
27 &self,
28 unit_id: &str,
29 ) -> RuntimeResult<Box<dyn RuntimeOperationLease>>;
30
31 async fn reserve_apply(
32 &self,
33 request: &RuntimeApplyRequest,
34 now_ms: u64,
35 ) -> RuntimeResult<RuntimeStateReservation>;
36
37 async fn reserve_action(
38 &self,
39 kind: RuntimeActionKind,
40 request: &RuntimeActionRequest,
41 now_ms: u64,
42 ) -> RuntimeResult<RuntimeStateReservation>;
43
44 async fn reserve_exec(
45 &self,
46 request: &RuntimeExecRequest,
47 now_ms: u64,
48 ) -> RuntimeResult<RuntimeStateReservation>;
49
50 async fn load(&self, unit_id: &str) -> RuntimeResult<RuntimeUnitRecord>;
51
52 async fn load_request(
53 &self,
54 unit_id: &str,
55 request_id: &str,
56 ) -> RuntimeResult<RuntimeRequestReceipt>;
57
58 async fn update_observation(
59 &self,
60 request_id: Option<&str>,
61 observation: &RuntimeObservation,
62 ) -> RuntimeResult<RuntimeUnitRecord>;
63
64 async fn complete_removal(&self, removal: &RuntimeRemoval) -> RuntimeResult<RuntimeUnitRecord>;
65
66 async fn complete_exec(&self, result: &RuntimeExecResult) -> RuntimeResult<RuntimeUnitRecord>;
67}