it crashes while decoding value classes, here is my classes where the SchemaVersion is a value class
@Serializable
data class ExtensionManifest(
val id: String,
val name: String,
val version: String,
@SerialName("schema_version")
val schemaVersion: SchemaVersion,
val description: String? = null,
val repository: String? = null,
val authors: List<String> = emptyList(),
val lib: LibManifestEntry = LibManifestEntry(),
val themes: List<Path> = emptyList(),
@SerialName("icon_themes")
val iconThemes: List<Path> = emptyList(),
val languages: List<Path> = emptyList(),
val grammars: Map<String, GrammarManifestEntry> = emptyMap(),
@SerialName("language_servers")
val languageServers: Map<LanguageServerName, LanguageServerManifestEntry> = emptyMap(),
val snippets: Path? = null,
val capabilities: List<ExtensionCapability> = emptyList()
)
SchemaVersion.kt
@JvmInline
@Serializable
value class SchemaVersion(val value: Int)
when running this test, I got following error:
val manifest = manifest()
val toml = Toml(inputConfig = TomlInputConfig(ignoreUnknownNames = true))
val tomlSrc = toml.encodeToString(manifest)
println(tomlSrc)
val manifest2: ExtensionManifest = toml.decodeFromString(tomlSrc)
manifest2.id shouldBe "test"
...
private fun manifest() = ExtensionManifest(
id = "test",
name = "Test",
version = "1.0.0",
schemaVersion = SchemaVersion.Zero
)
the output of val tomlSrc = toml.encodeToString(manifest):
id = "test"
name = "Test"
version = "1.0.0"
schema_version = 0
authors = [ ]
[lib]
[grammars]
[language_servers]
the error:
Index -1 out of bounds for length 8
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 8
at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
at java.base/java.util.Objects.checkIndex(Unknown Source)
at java.base/java.util.ArrayList.get(Unknown Source)
at com.akuleshov7.ktoml.decoders.TomlMainDecoder.getCurrentNode(TomlMainDecoder.kt:69)
at com.akuleshov7.ktoml.decoders.TomlMainDecoder.decodeKeyValue$ktoml_core(TomlMainDecoder.kt:90)
at com.akuleshov7.ktoml.decoders.TomlAbstractDecoder.decodeInt(TomlAbstractDecoder.kt:485)
at com.klyx.extension.SchemaVersion$$serializer.deserialize-yZEIvD4(SchemaVersion.kt:6)
at com.klyx.extension.SchemaVersion$$serializer.deserialize(SchemaVersion.kt:6)
at kotlinx.serialization.encoding.Decoder.decodeSerializableValue(Decoding.kt:258)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:16)
at com.akuleshov7.ktoml.decoders.TomlAbstractDecoder.decodeSerializableValue(TomlAbstractDecoder.kt:124)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
at com.klyx.extension.ExtensionManifest$$serializer.deserialize(ExtensionManifest.kt:18)
at com.klyx.extension.ExtensionManifest$$serializer.deserialize(ExtensionManifest.kt:18)
at kotlinx.serialization.encoding.Decoder.decodeSerializableValue(Decoding.kt:258)
at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:16)
at com.akuleshov7.ktoml.decoders.TomlAbstractDecoder.decodeSerializableValue(TomlAbstractDecoder.kt:124)
at com.akuleshov7.ktoml.decoders.TomlMainDecoder$Companion.decode(TomlMainDecoder.kt:340)
at com.akuleshov7.ktoml.Toml.decode(Toml.kt:160)
at com.akuleshov7.ktoml.Toml.decodeFromString(Toml.kt:52)
at com.klyx.extension.ExtensionManifestTest$5.invokeSuspend(ExtensionManifestTest.kt:130)
at com.klyx.extension.ExtensionManifestTest$5.invoke(ExtensionManifestTest.kt)
at com.klyx.extension.ExtensionManifestTest$5.invoke(ExtensionManifestTest.kt)
at io.kotest.engine.test.TestCaseExecutor$execute$innerExecute$1.invoke(TestCaseExecutor.kt:116)
When I changed the value class to data class then the error gone.
it crashes while decoding value classes, here is my classes where the
SchemaVersionis a value classSchemaVersion.ktwhen running this test, I got following error:
the output of
val tomlSrc = toml.encodeToString(manifest):the error:
When I changed the
value classtodata classthen the error gone.