sealed class Result { data class Success(val data: T) : Result() data class Error(val exception: Throwable) : Result() override fun toString(): String { return when (this) { is Success<*> -> "Success[data=$data]" is Error -> "Error[exception=$exception]" } } } interface ApiRx { @GET("/define") fun getDefinetion(@Query("term") word: String): Single> } class UrbanDataSourceRx(val apiRx: ApiRx, val mainApiRx: MainApiRx) { fun definition(word: String): Result { return apiRx.getDefinetion(word) // How to convert Single -> Result ???? // .blockingGet() without using it. } }