package com.linkedin.parseq.promise;
import java.util.function.BiConsumer;
public interface PromisePropagator<S, T> extends BiConsumer<Promise<S>, Settable<T>> {
default <R> PromisePropagator<S, R> compose(final PromisePropagator<T, R> propagator) {
final PromisePropagator<S, T> that = this;
return (src, dst) -> {
that.accept(src, new Settable<T>() {
@Override
public void done(T value) throws PromiseResolvedException {
propagator.accept(Promises.value(value), dst);
}
@Override
public void fail(Throwable error) throws PromiseResolvedException {
propagator.accept(Promises.error(error), dst);
}
});
};
}
}