Вот мое приложение для Android
suspend fun getTraidersList(isCustomtHandle: Boolean = false): Any {
if (isCustomtHandle) {
return runOperationWithoutHandle {
traderMonitorRestClient.getTraidersList()
}
} else {
return runOperationWithDefaultHandle {
traderMonitorRestClient.getTraidersList()
}
}
}
suspend fun executeTraderOperation(traderOperation: Trader.Operation, base: String, quote: String, isCustomtHandle: Boolean = false): Any {
val sender = BuildConfig.APPLICATION_ID + "_" + BuildConfig.VERSION_NAME
val key = DateUtil.getDateAsString(Date(), "mmHHddMMyyyy")
if (isCustomtHandle) {
return runOperationWithoutHandle {
traderMonitorRestClient.executeTraderOperation(traderOperation.toString().toLowerCase(), base.trim(), quote.trim(), sender, key)
}
} else {
return runOperationWithDefaultHandle {
traderMonitorRestClient.executeTraderOperation(traderOperation.toString().toLowerCase(), base.trim(), quote.trim(), sender, key)
}
}
}
suspend private fun runOperationWithoutHandle(func: suspend () -> Response<*>): Response<*> = withContext(Dispatchers.IO) {
val response: Response<*> = func() // in runtime replace by method body (e.g. traderMonitorRestClient.getTraidersList())
response
}
suspend private fun runOperationWithDefaultHandle(func: suspend () -> Response<*>): TransportResponse = withContext(Dispatchers.IO) {
try {
val response: Response<*> = func() // in runtime replace by method body (e.g. traderMonitorRestClient.getTraidersList())
if (response.isSuccessful) { // status (200-299)
onSuccess(response)
} else {// error - status (300-599)
val errorResponse: ErrorResponse = ErrorUtils.parseError(response)
onError(errorResponse)
}
} catch (e: Throwable) {
val errorResponse = ErrorResponse()
errorResponse.setCode(SERVICE_UNAVAILABLE_CODE)
errorResponse.message = MyApplication.getAppContext().getString(R.string.service_unavailable)
onError(errorResponse)
}
}
Если isCustomtHandle
равно true , тогда вызвать лямбду "runOperationWithoutHandle
". Эта лямбда ТОЛЬКО выполняет http-запрос и не обрабатывает.
Если isCustomtHandle
равно false , тогда вызвать лямбду "runOperationWithDefaultHandle
". Эта лямбда-функция выполняет http-запрос и обрабатывает ответ.
OK. Это отлично работает.
Но, как вы можете видеть, дубликат в строке
traderMonitorRestClient.executeTraderOperation(traderOperation.toString().toLowerCase(), base.trim(), quote.trim(), sender, key)
и
строка
traderMonitorRestClient.getTraidersList()
Как я могу удалить этот дубликат? Я хочу звонить на линии
traderMonitorRestClient.executeTraderOperation(traderOperation.toString().toLowerCase(), base.trim(), quote.trim(), sender, key)
и
traderMonitorRestClient.getTraidersList()
только один раз.
Как я могу это сделать?