class SampleViewModel @Inject constructor(
    private val fetchUseCase: FetchUseCase
) : BaseViewModel() {

    private val pageViewState = MutableLiveData<PageViewState>()

    fun getPageViewState(): LiveData<PageViewState> = pageViewState

    fun fetchData() {
        fetchUseCase
            .fetchData()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ renderData(it) }, ThrowableReporter::report) // ThrowableReporter is a logger class 
            .also { disposable += it } // disposable is CompositeDisposible in BaseViewModel
                                       // += is extension that is created to add Disposable to CompositeDisposable
    }

    private fun renderData(viewState: PageViewState) {
        pageViewState.value = viewState
    }
}