Monorepo for Tangled
tangled.org
1use std::future::Future;
2use std::pin::Pin;
3use std::sync::Arc;
4use std::sync::atomic::AtomicU64;
5
6use bobbin_edge_index::{CoverageWatch, EdgeStore};
7use bobbin_record_lru::NoopRecordStore;
8use bobbin_runtime::{Clock, Entropy, MemHttpResponder, MemWsResponder};
9use tokio_util::sync::CancellationToken;
10
11use crate::report::SimReport;
12
13pub struct WorkloadCtx {
14 pub seed: u64,
15 pub clock: Arc<dyn Clock>,
16 pub entropy: Arc<dyn Entropy>,
17 pub store: Arc<EdgeStore>,
18 pub coverage: Arc<CoverageWatch>,
19 pub records: Arc<NoopRecordStore>,
20 pub cancel: CancellationToken,
21 pub consumer_too_slow_count: Arc<AtomicU64>,
22}
23
24pub type WorkloadScript = Pin<Box<dyn Future<Output = SimReport> + Send + 'static>>;
25
26pub struct WorkloadHooks {
27 pub slingshot: Arc<dyn MemHttpResponder>,
28 pub hydrant: Arc<dyn MemWsResponder>,
29 pub script: WorkloadScript,
30}
31
32pub trait Workload: Send + 'static {
33 fn name(&self) -> &'static str;
34 fn build(self: Box<Self>, ctx: WorkloadCtx) -> WorkloadHooks;
35}