pausable_clock 1.0.2

A source of time information that can be paused and resumed
Documentation
use super::PausabilityStateTrait;
use super::PausableClock;

pub(super) struct UnpausableTaskGuard<'a>(&'a PausableClock);

impl<'a> UnpausableTaskGuard<'a> {
    pub(crate) fn try_lock(
        owner: &'a PausableClock,
    ) -> Result<UnpausableTaskGuard<'a>, ()> {
        let result = UnpausableTaskGuard(owner);

        let new_guard_state = owner.increment_unpausable_task_guards();

        if new_guard_state.is_pausing_requested() {
            Err(())
        } else {
            Ok(result)
        }
    }
}

impl<'a> Drop for UnpausableTaskGuard<'a> {
    fn drop(&mut self) {
        let _ = self.0.decrement_unpausable_task_guards();
    }
}