use std::sync::{Arc, Mutex};
#[derive(Debug)]
pub struct LatestFrameMailbox<T> {
slot: Arc<Mutex<Option<T>>>,
}
impl<T> Clone for LatestFrameMailbox<T> {
fn clone(&self) -> Self {
Self {
slot: Arc::clone(&self.slot),
}
}
}
impl<T> Default for LatestFrameMailbox<T> {
fn default() -> Self {
Self {
slot: Arc::new(Mutex::new(None)),
}
}
}
impl<T> LatestFrameMailbox<T> {
pub fn replace(&self, value: T) -> bool {
self.slot
.lock()
.expect("latest-frame mailbox mutex poisoned")
.replace(value)
.is_some()
}
pub fn take(&self) -> Option<T> {
self.slot
.lock()
.expect("latest-frame mailbox mutex poisoned")
.take()
}
pub fn clear(&self) {
let _ = self.take();
}
}