package org.wheelmap.android.net; import retrofit2.Response; import rx.Observable; import rx.Single; import rx.functions.Func1; class ApiUtils { private static class ApiException extends Exception { ApiException(Response response) { super(response.code() + ": " +response.message()); } } static <T> Observable.Transformer<Response<T>, T> failRequestAsError() { return new Observable.Transformer<Response<T>, T>() { @Override public Observable<T> call(Observable<Response<T>> observable) { return observable.flatMap(new Func1<Response<T>, Observable<T>>() { @Override public Observable<T> call(Response<T> tResponse) { if (tResponse.isSuccessful()) { return Observable.just(tResponse.body()); } else { return Observable.error(new ApiException(tResponse)); } } }); } }; } static <T> Single.Transformer<Response<T>, T> failRequestAsErrorSingle() { return new Single.Transformer<Response<T>, T>() { @Override public Single<T> call(Single<Response<T>> observable) { return observable.flatMap(new Func1<Response<T>, Single<T>>() { @Override public Single<T> call(Response<T> tResponse) { if (tResponse.isSuccessful()) { return Single.just(tResponse.body()); } else { return Single.error(new ApiException(tResponse)); } } }); } }; } }