1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
pub enum Response<A> { Success(A, usize, bool), Reject(usize, bool), } type OnSuccess<A, B> = fn(A, usize, bool) -> B; type OnReject<B> = fn(usize, bool) -> B; pub trait Fold<A, B> { fn fold(self, success: OnSuccess<A, B>, reject: OnReject<B>) -> B; } impl<A, B> Fold<A, B> for Response<A> { fn fold(self, success: OnSuccess<A, B>, reject: OnReject<B>) -> B { match self { Response::Success(a, s, b) => success(a, s, b), Response::Reject(s, b) => reject(s, b) } } }