use tokio::sync::mpsc;
use crate::errors::{EngineError, EngineResult};
use super::models::{LatencyStats, TestPhase, TestReport, TransferProgress, TransferStats};
#[derive(Debug, Clone)]
pub enum EngineEvent {
PhaseStarted {
phase: TestPhase,
},
PingSample {
sequence: u32,
latency_ms: f64,
},
PingFinished {
stats: LatencyStats,
},
Progress {
progress: TransferProgress,
},
TransferFinished {
phase: TestPhase,
stats: TransferStats,
},
Finished {
report: TestReport,
},
Failed {
message: String,
},
}
pub(crate) async fn emit(
events: &mpsc::Sender<EngineEvent>,
event: EngineEvent,
) -> EngineResult<()> {
events.send(event).await.map_err(|_| EngineError::Cancelled)
}