summaryrefslogtreecommitdiffstats
path: root/third_party/rust/tokio/src/future/poll_fn.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/tokio/src/future/poll_fn.rs')
-rw-r--r--third_party/rust/tokio/src/future/poll_fn.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/third_party/rust/tokio/src/future/poll_fn.rs b/third_party/rust/tokio/src/future/poll_fn.rs
new file mode 100644
index 0000000000..d82ce8961d
--- /dev/null
+++ b/third_party/rust/tokio/src/future/poll_fn.rs
@@ -0,0 +1,40 @@
+#![allow(dead_code)]
+
+//! Definition of the `PollFn` adapter combinator.
+
+use std::fmt;
+use std::future::Future;
+use std::pin::Pin;
+use std::task::{Context, Poll};
+
+/// Future for the [`poll_fn`] function.
+pub struct PollFn<F> {
+ f: F,
+}
+
+impl<F> Unpin for PollFn<F> {}
+
+/// Creates a new future wrapping around a function returning [`Poll`].
+pub fn poll_fn<T, F>(f: F) -> PollFn<F>
+where
+ F: FnMut(&mut Context<'_>) -> Poll<T>,
+{
+ PollFn { f }
+}
+
+impl<F> fmt::Debug for PollFn<F> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("PollFn").finish()
+ }
+}
+
+impl<T, F> Future for PollFn<F>
+where
+ F: FnMut(&mut Context<'_>) -> Poll<T>,
+{
+ type Output = T;
+
+ fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<T> {
+ (&mut self.f)(cx)
+ }
+}