frugalos_raft 1.2.0

An implementation of the `raftlog::Io` trait for `frugalos`
Documentation
use futures::{Future, Poll};
use raftlog::Error;

#[derive(Debug)]
pub enum Phase<A, B> {
    A(A),
    B(B),
}
impl<A, B> Future for Phase<A, B>
where
    A: Future<Error = Error>,
    B: Future<Error = Error>,
{
    type Item = Phase<A::Item, B::Item>;
    type Error = Error;

    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
        match self {
            Phase::A(f) => track!(f.poll()).map(|t| t.map(Phase::A)),
            Phase::B(f) => track!(f.poll()).map(|t| t.map(Phase::B)),
        }
    }
}

#[derive(Debug)]
pub enum Phase5<A, B, C, D, E> {
    A(A),
    B(B),
    C(C),
    D(D),
    E(E),
}
impl<A, B, C, D, E> Future for Phase5<A, B, C, D, E>
where
    A: Future<Error = Error>,
    B: Future<Error = Error>,
    C: Future<Error = Error>,
    D: Future<Error = Error>,
    E: Future<Error = Error>,
{
    #[allow(clippy::type_complexity)]
    type Item = Phase5<A::Item, B::Item, C::Item, D::Item, E::Item>;
    type Error = Error;

    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
        match self {
            Phase5::A(f) => track!(f.poll()).map(|t| t.map(Phase5::A)),
            Phase5::B(f) => track!(f.poll()).map(|t| t.map(Phase5::B)),
            Phase5::C(f) => track!(f.poll()).map(|t| t.map(Phase5::C)),
            Phase5::D(f) => track!(f.poll()).map(|t| t.map(Phase5::D)),
            Phase5::E(f) => track!(f.poll()).map(|t| t.map(Phase5::E)),
        }
    }
}