27 lines
890 B
Kotlin
27 lines
890 B
Kotlin
package dev.inmo.tgbotapi.bot.Ktor.base
|
|
|
|
import dev.inmo.micro_utils.coroutines.safely
|
|
import dev.inmo.tgbotapi.bot.Ktor.KtorCallFactory
|
|
import dev.inmo.tgbotapi.requests.DownloadFile
|
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
|
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
|
import io.ktor.client.HttpClient
|
|
import io.ktor.client.request.get
|
|
import kotlinx.serialization.json.Json
|
|
|
|
object DownloadFileRequestCallFactory : KtorCallFactory {
|
|
override suspend fun <T : Any> makeCall(
|
|
client: HttpClient,
|
|
urlsKeeper: TelegramAPIUrlsKeeper,
|
|
request: Request<T>,
|
|
jsonFormatter: Json
|
|
): T? = (request as? DownloadFile) ?.let {
|
|
val fullUrl = "${urlsKeeper.fileBaseUrl}/${it.filePath}"
|
|
|
|
return safely {
|
|
@Suppress("UNCHECKED_CAST")
|
|
client.get<ByteArray>(fullUrl) as T // always ByteArray
|
|
}
|
|
}
|
|
}
|