use crossbeam_channel::{Receiver, Sender, unbounded};
use rite_model::StepId;
use crate::protocol::{ExecEvent, UiCommand};
use crate::reporter::Reporter;
use crate::transcript_sink::InMemorySink;
use rite_model::StepFact;
pub struct ReporterHarness {
sink: InMemorySink,
event_tx: Sender<ExecEvent>,
_event_rx: Receiver<ExecEvent>,
_cmd_tx: Sender<UiCommand>,
cmd_rx: Receiver<UiCommand>,
}
impl ReporterHarness {
#[must_use]
pub fn new() -> Self {
let (event_tx, event_rx) = unbounded();
let (cmd_tx, cmd_rx) = unbounded();
Self {
sink: InMemorySink::new(),
event_tx,
_event_rx: event_rx,
_cmd_tx: cmd_tx,
cmd_rx,
}
}
pub fn reporter(&mut self, step: StepId) -> Reporter<'_> {
let mut reporter = Reporter::new(&self.event_tx, &self.cmd_rx, &mut self.sink);
reporter.set_current_step(Some(step));
reporter
}
#[must_use]
pub fn facts(&self) -> &[StepFact] {
self.sink.facts()
}
}
impl Default for ReporterHarness {
fn default() -> Self {
Self::new()
}
}