use super::*;
pub trait FnFutureOnce<T: Tuple>: FnOnce<T, Output: IntoFuture<IntoFuture = Self::Future>> {
type Future: Future<Output = Self::FutOutput>;
type FutOutput;
}
impl<T: Tuple, F: FnOnce<T, Output: IntoFuture>> FnFutureOnce<T> for F {
type Future = <F::Output as IntoFuture>::IntoFuture;
type FutOutput = <F::Output as IntoFuture>::Output;
}
pub trait FnFutureMut<T: Tuple>: FnMut<T> + FnFutureOnce<T> {}
impl<T: Tuple, F: FnMut<T> + FnFutureOnce<T>> FnFutureMut<T> for F {}
pub trait FnFuture<T: Tuple>: Fn<T> + FnFutureMut<T> {}
impl<T: Tuple, F: Fn<T> + FnFutureMut<T>> FnFuture<T> for F {}