use std::future::Future; use std::pin::Pin; use std::sync::Arc; use std::sync::atomic::AtomicU64; use bobbin_edge_index::{CoverageWatch, EdgeStore}; use bobbin_record_lru::NoopRecordStore; use bobbin_runtime::{Clock, Entropy, MemHttpResponder, MemWsResponder}; use tokio_util::sync::CancellationToken; use crate::report::SimReport; pub struct WorkloadCtx { pub seed: u64, pub clock: Arc, pub entropy: Arc, pub store: Arc, pub coverage: Arc, pub records: Arc, pub cancel: CancellationToken, pub consumer_too_slow_count: Arc, } pub type WorkloadScript = Pin + Send + 'static>>; pub struct WorkloadHooks { pub slingshot: Arc, pub hydrant: Arc, pub script: WorkloadScript, } pub trait Workload: Send + 'static { fn name(&self) -> &'static str; fn build(self: Box, ctx: WorkloadCtx) -> WorkloadHooks; }