use std::fmt;
use std::marker::PhantomData;
use crate::entry::EntryPtr;
#[must_use = "handles must be consumed via cancel() or free(), dropping leaks the timer slot"]
pub struct TimerHandle<T> {
pub(crate) ptr: EntryPtr<T>,
_marker: PhantomData<*const ()>,
}
impl<T> TimerHandle<T> {
#[inline]
pub(crate) fn new(ptr: EntryPtr<T>) -> Self {
TimerHandle {
ptr,
_marker: PhantomData,
}
}
}
impl<T> Drop for TimerHandle<T> {
fn drop(&mut self) {
debug_assert!(
false,
"TimerHandle dropped without being consumed — call wheel.cancel() or wheel.free()"
);
}
}
impl<T> fmt::Debug for TimerHandle<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("TimerHandle")
.field("ptr", &self.ptr)
.finish()
}
}