From a136db16ff9fb0de938d124ac0fe9f3408ccc030 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Sat, 15 Jul 2023 10:49:42 +0300 Subject: [PATCH] Refactoring to kotlinx-io complete --- dataforge-workspace/build.gradle.kts | 36 ++++++++++++++----- .../dataforge/workspace/FileWorkspaceCache.kt | 13 +++---- .../kscience/dataforge/workspace/zipData.kt | 15 ++++---- .../dataforge/workspace/FileDataTest.kt | 19 +++++----- gradle.properties | 1 + gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 55 insertions(+), 31 deletions(-) diff --git a/dataforge-workspace/build.gradle.kts b/dataforge-workspace/build.gradle.kts index 28a633c8..9f10df98 100644 --- a/dataforge-workspace/build.gradle.kts +++ b/dataforge-workspace/build.gradle.kts @@ -10,17 +10,35 @@ kscience{ useSerialization{ protobuf() } - dependencies { - api(projects.dataforgeContext) - api(projects.dataforgeData) - api(projects.dataforgeIo) - } - dependencies(jvmTest){ - implementation(spclibs.logback.classic) - implementation(projects.dataforgeIo.dataforgeIoYaml) - } +// dependencies { +// api(projects.dataforgeContext) +// api(projects.dataforgeData) +// api(projects.dataforgeIo) +// } +// dependencies(jvmTest){ +// implementation(spclibs.logback.classic) +// implementation(projects.dataforgeIo.dataforgeIoYaml) +// } } readme{ maturity = space.kscience.gradle.Maturity.EXPERIMENTAL +} + +kotlin{ + sourceSets{ + commonMain{ + dependencies { + api(projects.dataforgeContext) + api(projects.dataforgeData) + api(projects.dataforgeIo) + } + } + getByName("jvmTest"){ + dependencies { + implementation(spclibs.logback.classic) + implementation(projects.dataforgeIo.dataforgeIoYaml) + } + } + } } \ No newline at end of file diff --git a/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/FileWorkspaceCache.kt b/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/FileWorkspaceCache.kt index 1f725a60..a637ad97 100644 --- a/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/FileWorkspaceCache.kt +++ b/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/FileWorkspaceCache.kt @@ -1,5 +1,6 @@ package space.kscience.dataforge.workspace +import kotlinx.io.* import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.KSerializer import kotlinx.serialization.json.Json @@ -26,10 +27,10 @@ public class JsonIOFormat(override val type: KType) : IOFormat { @Suppress("UNCHECKED_CAST") private val serializer: KSerializer = serializer(type) as KSerializer - override fun readObject(input: Input): T = Json.decodeFromString(serializer, input.readUtf8String()) + override fun readObject(input: Source): T = Json.decodeFromString(serializer, input.readString()) - override fun writeObject(output: Output, obj: T) { - output.writeUtf8String(Json.encodeToString(serializer, obj)) + override fun writeObject(output: Sink, obj: T) { + output.writeString(Json.encodeToString(serializer, obj)) } } @@ -39,10 +40,10 @@ public class ProtobufIOFormat(override val type: KType) : IOFormat { @Suppress("UNCHECKED_CAST") private val serializer: KSerializer = serializer(type) as KSerializer - override fun readObject(input: Input): T = ProtoBuf.decodeFromByteArray(serializer, input.readBytes()) + override fun readObject(input: Source): T = ProtoBuf.decodeFromByteArray(serializer, input.readByteArray()) - override fun writeObject(output: Output, obj: T) { - output.writeFully(ProtoBuf.encodeToByteArray(serializer, obj)) + override fun writeObject(output: Sink, obj: T) { + output.write(ProtoBuf.encodeToByteArray(serializer, obj)) } } diff --git a/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/zipData.kt b/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/zipData.kt index 706a2d0b..d23753a2 100644 --- a/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/zipData.kt +++ b/dataforge-workspace/src/jvmMain/kotlin/space/kscience/dataforge/workspace/zipData.kt @@ -1,13 +1,10 @@ package space.kscience.dataforge.workspace -import io.ktor.utils.io.streams.asOutput import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import space.kscience.dataforge.data.DataTree import space.kscience.dataforge.data.DataTreeItem -import space.kscience.dataforge.io.EnvelopeFormat -import space.kscience.dataforge.io.IOFormat -import space.kscience.dataforge.io.TaggedEnvelopeFormat +import space.kscience.dataforge.io.* import space.kscience.dataforge.misc.DFExperimental import java.nio.file.Files import java.nio.file.Path @@ -28,11 +25,15 @@ private suspend fun ZipOutputStream.writeNode( val envelope = treeItem.data.toEnvelope(dataFormat) val entry = ZipEntry(name) putNextEntry(entry) - asOutput().run { - envelopeFormat.writeObject(this, envelope) - flush() + + //TODO remove additional copy + val bytes = ByteArray { + writeObject(envelopeFormat, envelope) } + write(bytes) + } + is DataTreeItem.Node -> { val entry = ZipEntry("$name/") putNextEntry(entry) diff --git a/dataforge-workspace/src/jvmTest/kotlin/space/kscience/dataforge/workspace/FileDataTest.kt b/dataforge-workspace/src/jvmTest/kotlin/space/kscience/dataforge/workspace/FileDataTest.kt index 6ec31e0c..313ea82e 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/space/kscience/dataforge/workspace/FileDataTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/space/kscience/dataforge/workspace/FileDataTest.kt @@ -1,8 +1,11 @@ package space.kscience.dataforge.workspace -import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.Output import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest +import kotlinx.io.Sink +import kotlinx.io.Source +import kotlinx.io.readString +import kotlinx.io.writeString import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.Global import space.kscience.dataforge.data.* @@ -36,11 +39,11 @@ class FileDataTest { object StringIOFormat : IOFormat { override val type: KType get() = typeOf() - override fun writeObject(output: Output, obj: String) { - output.writeUtf8String(obj) + override fun writeObject(output: Sink, obj: String) { + output.writeString(obj) } - override fun readObject(input: Input): String = input.readUtf8String() + override fun readObject(input: Source): String = input.readString() } @Test @@ -59,9 +62,9 @@ class FileDataTest { @Test @DFExperimental - fun testZipWriteRead() = with(Global.io) { - val zip = Files.createTempFile("df_data_node", ".zip") - runBlocking { + fun testZipWriteRead() = runTest { + with(Global.io) { + val zip = Files.createTempFile("df_data_node", ".zip") dataNode.writeZip(zip, StringIOFormat) println(zip.toUri().toString()) val reconstructed = readDataDirectory(zip) { _, _ -> StringIOFormat } diff --git a/gradle.properties b/gradle.properties index df992b2c..d26973e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,3 +7,4 @@ kotlin.incremental.js.ir=true kotlin.native.ignoreDisabledTargets=true toolsVersion=0.14.9-kotlin-1.9.0 +kotlin.experimental.tryK2=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15de9024..84a0b92f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists