use std::sync::Mutex;
use tor_guardmgr::{GuardMonitor, GuardStatus};
use tor_proto::ClockSkew;
pub(crate) struct GuardStatusHandle {
mon: Mutex<Option<GuardMonitor>>,
}
impl From<Option<GuardMonitor>> for GuardStatusHandle {
fn from(mon: Option<GuardMonitor>) -> Self {
Self {
mon: Mutex::new(mon),
}
}
}
impl GuardStatusHandle {
pub(crate) fn commit(&self) {
let mut mon = self.mon.lock().expect("Poisoned lock");
if let Some(mon) = mon.take() {
mon.commit();
}
}
pub(crate) fn pending(&self, status: GuardStatus) {
let mut mon = self.mon.lock().expect("Poisoned lock");
if let Some(mon) = mon.as_mut() {
mon.pending_status(status);
}
}
pub(crate) fn skew(&self, skew: ClockSkew) {
let mut mon = self.mon.lock().expect("Poisoned lock");
if let Some(mon) = mon.as_mut() {
mon.skew(skew);
}
}
pub(crate) fn report(&self, status: GuardStatus) {
let mut mon = self.mon.lock().expect("Poisoned lock");
if let Some(mon) = mon.take() {
mon.report(status);
}
}
}