macro_rules! easy_wrapper {
(
$(#[$meta:meta])*
$vis:vis struct $name:ident
$(<
$( $lifetime:lifetime $(: $lifetime_bound:lifetime)? ),* $(,)?
$( $generics:ident
$(: $generics_bound:path)?
$(: ?$generics_unsized_bound:path)?
$(: $generics_lifetime_bound:lifetime)?
$(= $generics_default:ty)?
),* $(,)?
>)?
($inner:ty => $output:ty)
$(where
$( $where_clause_ty:ty
$(: $where_clause_bound:path)?
$(: ?$where_clause_unsized_bound:path)?
$(: $where_clause_lifetime_bound:lifetime)?
),* $(,)?
)?
;
$(#[$wait_meta:meta])*
$wait_vis: vis wait();
) => { ... };
}
Expand description
A wrapper around an EventListenerFuture
that can be easily exported for use.
This type implements Future
, has a _new()
constructor, and a wait()
method
that uses the Blocking
strategy to poll the future until it is ready.
ยงExamples
mod my_future {
use event_listener_strategy::{easy_wrapper, EventListenerFuture, Strategy};
use std::pin::Pin;
use std::task::Poll;
struct MyFuture;
impl EventListenerFuture for MyFuture {
type Output = ();
fn poll_with_strategy<'a, S: Strategy<'a>>(
self: Pin<&mut Self>,
strategy: &mut S,
context: &mut S::Context,
) -> Poll<Self::Output> {
/* ... */
}
}
easy_wrapper! {
/// A future that does something.
pub struct MyFutureWrapper(MyFuture => ());
/// Wait for it.
pub wait();
}
impl MyFutureWrapper {
/// Create a new instance of the future.
pub fn new() -> Self {
Self::_new(MyFuture)
}
}
}
use my_future::MyFutureWrapper;
// Use the future in a blocking context.
let future = MyFutureWrapper::new();
future.wait();
// Use the future in a non-blocking context.
futures_lite::future::block_on(async {
let future = MyFutureWrapper::new();
future.await;
});