Move network extensions to separate file

This commit is contained in:
Kirill Kamakin
2021-11-27 00:18:12 +03:00
parent 20c19fd644
commit b5606f3241
2 changed files with 21 additions and 11 deletions

View File

@@ -5,16 +5,14 @@ import gq.kirmanak.mealient.data.auth.AuthService
import gq.kirmanak.mealient.data.auth.impl.AuthenticationError.*
import gq.kirmanak.mealient.data.impl.ErrorDetail
import gq.kirmanak.mealient.data.impl.RetrofitBuilder
import gq.kirmanak.mealient.data.impl.util.decodeErrorBodyOrNull
import kotlinx.coroutines.CancellationException
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import retrofit2.HttpException
import retrofit2.Response
import retrofit2.create
import timber.log.Timber
import java.io.InputStream
import javax.inject.Inject
@ExperimentalSerializationApi
@@ -22,6 +20,7 @@ class AuthDataSourceImpl @Inject constructor(
private val retrofitBuilder: RetrofitBuilder,
private val json: Json,
) : AuthDataSource {
override suspend fun authenticate(
username: String,
password: String,
@@ -54,12 +53,4 @@ class AuthDataSourceImpl @Inject constructor(
Timber.v("authenticate() returned: $accessToken")
return accessToken
}
private inline fun <reified T, reified R> Response<T>.decodeErrorBodyOrNull(): R? =
errorBody()?.byteStream()?.let { json.decodeFromStreamOrNull<R>(it) }
private inline fun <reified T> Json.decodeFromStreamOrNull(stream: InputStream): T? =
runCatching { decodeFromStream<T>(stream) }
.onFailure { Timber.e(it, "decodeFromStreamOrNull: can't decode") }
.getOrNull()
}

View File

@@ -0,0 +1,19 @@
package gq.kirmanak.mealient.data.impl.util
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import retrofit2.Response
import timber.log.Timber
import java.io.InputStream
@ExperimentalSerializationApi
inline fun <T, reified R> Response<T>.decodeErrorBodyOrNull(json: Json): R? =
errorBody()?.byteStream()?.let { json.decodeFromStreamOrNull<R>(it) }
@ExperimentalSerializationApi
inline fun <reified T> Json.decodeFromStreamOrNull(stream: InputStream): T? =
runCatching { decodeFromStream<T>(stream) }
.onFailure { Timber.e(it, "decodeFromStreamOrNull: can't decode") }
.getOrNull()