use tokio::sync::watch;
use super::{ClockReading, ClockSource, TimeUnsynchronized};
use crate::bus::RobotInstant;
#[derive(Clone)]
pub(crate) struct SimulationClock {
rx: watch::Receiver<Option<RobotInstant>>,
}
impl SimulationClock {
pub(crate) fn from_receiver(rx: watch::Receiver<Option<RobotInstant>>) -> Self {
Self { rx }
}
}
impl ClockSource for SimulationClock {
fn read(&self) -> ClockReading {
match *self.rx.borrow() {
Some(instant) => ClockReading::Synchronized(instant),
None => ClockReading::Unsynchronized(TimeUnsynchronized::NoWorldHistory),
}
}
}