package com.ittianyu.pocenter.common.utils;
import java.util.NoSuchElementException;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* Created by yu on 2016/12/2.
*/
public class RxUtils {
/**
* subscribeOn io
* observeOn mainThread
*
* @param <T>
* @return
*/
public static <T> ObservableTransformer<T, T> netScheduler() {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
/**
* If the publish is empty, it wll run onError and throw a NoSuchElementException
* @param <T>
* @return
*/
public static <T> ObservableTransformer<T, T> notEmptyOrError() {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
return upstream.switchIfEmpty(new Observable<T>() {
@Override
protected void subscribeActual(Observer<? super T> observer) {
observer.onError(new NoSuchElementException());
}
});
}
};
}
}