add default input providers
This commit is contained in:
@@ -12,9 +12,9 @@ kotlin {
|
||||
dependencies {
|
||||
api libs.microutils.common
|
||||
api libs.microutils.serialization.typedserializer
|
||||
api libs.klock
|
||||
api "io.insert-koin:koin-core:$koin_version"
|
||||
api "com.benasher44:uuid:$uuid_version"
|
||||
api "com.soywiz.korlibs.klock:klock:$klock_version"
|
||||
api "io.ktor:ktor-http:$ktor_version"
|
||||
}
|
||||
}
|
||||
|
@@ -1,30 +1,47 @@
|
||||
package dev.inmo.postssystem.features.common.common
|
||||
|
||||
import dev.inmo.micro_utils.common.ByteArrayAllocatorSerializer
|
||||
import dev.inmo.micro_utils.common.MPPFile
|
||||
import io.ktor.utils.io.core.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.ByteArraySerializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
typealias SimpleInputProvider = () -> Input
|
||||
@Serializable(SimpleInputProviderSerializer::class)
|
||||
interface SimpleInputProvider {
|
||||
operator fun invoke(): Input
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class BytesBasedInputProvider(
|
||||
private val bytes: ByteArray
|
||||
) : SimpleInputProvider {
|
||||
override fun invoke(): Input {
|
||||
return ByteReadPacket(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable(SimpleInputProviderSerializer::class)
|
||||
expect class FileBasedInputProvider : SimpleInputProvider {
|
||||
val file: MPPFile
|
||||
}
|
||||
|
||||
object SimpleInputProviderSerializer : KSerializer<SimpleInputProvider> {
|
||||
private val serializer = ByteArraySerializer()
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = ByteArrayAllocatorSerializer.descriptor
|
||||
get() = serializer.descriptor
|
||||
override fun deserialize(decoder: Decoder): SimpleInputProvider {
|
||||
val allocator = ByteArrayAllocatorSerializer.deserialize(decoder)
|
||||
return {
|
||||
ByteReadPacket(allocator.invoke())
|
||||
}
|
||||
val bytes = serializer.deserialize(decoder)
|
||||
return BytesBasedInputProvider(bytes)
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: SimpleInputProvider) {
|
||||
ByteArrayAllocatorSerializer.serialize(
|
||||
encoder
|
||||
) {
|
||||
serializer.serialize(
|
||||
encoder,
|
||||
value().readBytes()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,14 @@
|
||||
package dev.inmo.postssystem.features.common.common
|
||||
|
||||
import dev.inmo.micro_utils.common.MPPFile
|
||||
import io.ktor.utils.io.core.ByteReadPacket
|
||||
import io.ktor.utils.io.core.Input
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable(SimpleInputProviderSerializer::class)
|
||||
actual class FileBasedInputProvider internal constructor(
|
||||
actual val file: MPPFile,
|
||||
private val bytes: ByteArray
|
||||
) : SimpleInputProvider {
|
||||
override fun invoke(): Input = ByteReadPacket(bytes)
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
package dev.inmo.postssystem.features.common.common
|
||||
|
||||
import dev.inmo.micro_utils.common.MPPFile
|
||||
import io.ktor.utils.io.core.Input
|
||||
import io.ktor.utils.io.streams.asInput
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable(SimpleInputProviderSerializer::class)
|
||||
actual class FileBasedInputProvider(
|
||||
actual val file: MPPFile
|
||||
) : SimpleInputProvider {
|
||||
override fun invoke(): Input = file.inputStream().asInput()
|
||||
}
|
@@ -3,6 +3,7 @@ package dev.inmo.postssystem.features.files.common
|
||||
import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage
|
||||
import dev.inmo.micro_utils.pagination.*
|
||||
import dev.inmo.micro_utils.repos.ReadKeyValueRepo
|
||||
import dev.inmo.postssystem.features.common.common.FileBasedInputProvider
|
||||
import io.ktor.utils.io.streams.asInput
|
||||
import java.io.File
|
||||
|
||||
@@ -37,10 +38,9 @@ class DiskReadFilesStorage(
|
||||
id,
|
||||
FullFileInfo(
|
||||
it.fileInfo.name,
|
||||
it.fileInfo.mimeType
|
||||
) {
|
||||
id.file.inputStream().asInput()
|
||||
}
|
||||
it.fileInfo.mimeType,
|
||||
FileBasedInputProvider(id.file)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user