package <%= appPackage %>.domain.interactors.base import io.reactivex.* import io.reactivex.android.schedulers.AndroidSchedulers open class BaseUseCase(val executor: Scheduler) { fun observable(action: () -> Observable): Observable { return action() } fun single(action: () -> Single): Single { return action() } fun callable(action: () -> T): Observable { return Observable.fromCallable { action() } } fun callableSingle(action: () -> Observable): Single> { return Single.fromCallable { action() } } fun deferSingle(action: () -> Single): Single { return Single.defer { action() } } fun defer(action: () -> Observable): Observable { return Observable.defer({ action() }) } fun transform(e: Scheduler = executor): ObservableTransformer { return ObservableTransformer { it.subscribeOn(e).observeOn(AndroidSchedulers.mainThread()) } } fun transformSingle(e: Scheduler = executor): SingleTransformer { return SingleTransformer { it.subscribeOn(e).observeOn(AndroidSchedulers.mainThread()) } } }