diff options
Diffstat (limited to 'third_party/rust/tokio/src/time/driver/handle.rs')
-rw-r--r-- | third_party/rust/tokio/src/time/driver/handle.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/third_party/rust/tokio/src/time/driver/handle.rs b/third_party/rust/tokio/src/time/driver/handle.rs new file mode 100644 index 0000000000..38b1761c8e --- /dev/null +++ b/third_party/rust/tokio/src/time/driver/handle.rs @@ -0,0 +1,38 @@ +use crate::runtime::context; +use crate::time::driver::Inner; +use std::fmt; +use std::sync::{Arc, Weak}; + +/// Handle to time driver instance. +#[derive(Clone)] +pub(crate) struct Handle { + inner: Weak<Inner>, +} + +impl Handle { + /// Creates a new timer `Handle` from a shared `Inner` timer state. + pub(crate) fn new(inner: Weak<Inner>) -> Self { + Handle { inner } + } + + /// Tries to get a handle to the current timer. + /// + /// # Panics + /// + /// This function panics if there is no current timer set. + pub(crate) fn current() -> Self { + context::time_handle() + .expect("there is no timer running, must be called from the context of Tokio runtime") + } + + /// Tries to return a strong ref to the inner + pub(crate) fn inner(&self) -> Option<Arc<Inner>> { + self.inner.upgrade() + } +} + +impl fmt::Debug for Handle { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Handle") + } +} |