mirror of
https://github.com/OMGeeky/tarpc.git
synced 2025-12-29 07:40:14 +01:00
@@ -9,72 +9,6 @@ macro_rules! as_item {
|
||||
($i:item) => {$i};
|
||||
}
|
||||
|
||||
/// Creates an enum where each variant contains a `Future`. The created enum impls `Future`.
|
||||
/// Useful when a fn needs to return possibly many different types of futures.
|
||||
#[macro_export]
|
||||
macro_rules! future_enum {
|
||||
{
|
||||
$(#[$attr:meta])*
|
||||
pub enum $name:ident<$($tp:ident),*> {
|
||||
$(#[$attrv:meta])*
|
||||
$($variant:ident($inner:ty)),*
|
||||
}
|
||||
} => {
|
||||
future_enum! {
|
||||
$(#[$attr:meta])*
|
||||
(pub) enum $name<$($tp),*> {
|
||||
$(#[$attrv])*
|
||||
$($variant($inner)),*
|
||||
}
|
||||
}
|
||||
};
|
||||
{
|
||||
$(#[$attr:meta])*
|
||||
enum $name:ident<$($tp:ident),*> {
|
||||
$(#[$attrv:meta])*
|
||||
$($variant:ident($inner:ty)),*
|
||||
}
|
||||
} => {
|
||||
future_enum! {
|
||||
$(#[$attr:meta])*
|
||||
() enum $name<$($tp),*> {
|
||||
$(#[$attrv])*
|
||||
$($variant($inner)),*
|
||||
}
|
||||
}
|
||||
};
|
||||
{
|
||||
$(#[$attr:meta])*
|
||||
($($vis:tt)*) enum $name:ident<$($tp:ident),*> {
|
||||
$(#[$attrv:meta])*
|
||||
$($variant:ident($inner:ty)),*
|
||||
}
|
||||
} => {
|
||||
$(#[$attr])*
|
||||
as_item! {
|
||||
$($vis)* enum $name<$($tp),*> {
|
||||
$(#[$attrv])*
|
||||
$($variant($inner)),*
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(non_camel_case_types)]
|
||||
impl<__future_enum_T, __future_enum_E, $($tp),*> $crate::futures::Future for $name<$($tp),*>
|
||||
where __future_enum_T: Send + 'static,
|
||||
$($inner: $crate::futures::Future<Item=__future_enum_T, Error=__future_enum_E>),*
|
||||
{
|
||||
type Item = __future_enum_T;
|
||||
type Error = __future_enum_E;
|
||||
|
||||
fn poll(&mut self) -> $crate::futures::Poll<Self::Item, Self::Error> {
|
||||
match *self {
|
||||
$($name::$variant(ref mut f) => $crate::futures::Future::poll(f)),*
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[macro_export]
|
||||
macro_rules! impl_serialize {
|
||||
|
||||
Reference in New Issue
Block a user