
io.reactiverse.reactivecontexts.propagators.rxjava1.ContextPropagatorOnSingleCreateAction Maven / Gradle / Ivy
The newest version!
package io.reactiverse.reactivecontexts.propagators.rxjava1;
import io.reactiverse.reactivecontexts.core.Context;
import io.reactiverse.reactivecontexts.core.ContextState;
import rx.Single;
import rx.Single.OnSubscribe;
import rx.SingleSubscriber;
import rx.functions.Func1;
public class ContextPropagatorOnSingleCreateAction implements Func1 {
@Override
public OnSubscribe call(OnSubscribe t) {
return new ContextCapturerSingle(t);
}
final static class ContextCapturerSingle implements Single.OnSubscribe {
final Single.OnSubscribe source;
private ContextState states;
public ContextCapturerSingle(Single.OnSubscribe source) {
this.source = source;
states = Context.capture();
}
@Override
public void call(SingleSubscriber super T> t) {
ContextState previousStates = states.install();
try {
source.call(new OnAssemblySingleSubscriber(t, states));
}finally {
previousStates.restore();
}
}
static final class OnAssemblySingleSubscriber extends SingleSubscriber {
final SingleSubscriber super T> actual;
private final ContextState states;
public OnAssemblySingleSubscriber(SingleSubscriber super T> actual, ContextState states) {
this.actual = actual;
this.states = states;
actual.add(this);
}
@Override
public void onError(Throwable e) {
ContextState previousStates = states.install();
try {
actual.onError(e);
}finally {
previousStates.restore();
}
}
@Override
public void onSuccess(T t) {
ContextState previousStates = states.install();
try {
actual.onSuccess(t);
}finally {
previousStates.restore();
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy