Kotlin рефакторинг кода

Имеются похожие методы, например

suspend fun getProfile() = withContext(Dispatchers.IO){
        val settings = settingsDao.get
        netManager.isConnectedToInternet?.let{ connect ->
            if(connect){
                RemoteDataSource(settings.token).getProfile()
            } else{
                NewRequestModel.ErrorInternet(true)
            }
        } ?: NewRequestModel.ErrorInternet(true)
        request
    }

suspend fun getFilter() = withContext(Dispatchers.IO){
        val settings = settingsDao.get
        val request = netManager.isConnectedToInternet?.let{
            if(it){
                RemoteDataSource(settings.token).getFilter()
            } else{
                NewRequestModel.ErrorInternet(true)
            }
        } ?: NewRequestModel.ErrorInternet(true)
        request
    }

У них все одинаково, кроме одной строчки, я хочу это отредактировать

suspend fun getResult(networkCall : () -> NewRequestModel<Any>) = withContext(Dispatchers.IO) {
        netManager.isConnectedToInternet?.let { connect ->
            if (connect) {
                networkCall.invoke()
            } else {
                NewRequestModel.ErrorInternet(true)
            }
        } ?: NewRequestModel.ErrorInternet(true)
    }

Как вызывать:

suspend fun getFilter() = withContext(Dispatchers.IO){
        val settings = settingsDao.get
        val result = getResult{RemoteDataSource().getFilter()}
    }

Как можно перенести val settings = settingsDao.get в getResult, передав в networkCall.invoke() setting.token?


Ответы (0 шт):