Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit 838ae7e

Browse files
authored
Merge pull request #8 from sciwhiz12/deserialize-string-only-json
Allow deserializing string-only text component
2 parents 55b8106 + ed7985c commit 838ae7e

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-4
lines changed

.run/Run Tests.run.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Run Tests" type="JUnit" factoryName="JUnit">
33
<module name="Scroll.test" />
4-
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
5-
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
64
<option name="PACKAGE_NAME" value="" />
75
<option name="MAIN_CLASS_NAME" value="" />
86
<option name="METHOD_NAME" value="" />

src/main/kotlin/io/github/dockyardmc/scroll/Component.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package io.github.dockyardmc.scroll
22

3+
import io.github.dockyardmc.scroll.serializers.ComponentDeserializer
34
import io.github.dockyardmc.scroll.serializers.ComponentToJsonSerializer
45
import io.github.dockyardmc.scroll.serializers.ComponentSerializer
6+
import kotlinx.serialization.KeepGeneratedSerializer
57
import kotlinx.serialization.SerialName
68
import kotlinx.serialization.Serializable
79
import net.kyori.adventure.nbt.CompoundBinaryTag
810

9-
@Serializable
11+
@KeepGeneratedSerializer
12+
@Serializable(with = ComponentDeserializer::class)
1013
open class Component(
1114
var extra: MutableList<Component>? = null,
1215
var keybind: String? = null,

src/main/kotlin/io/github/dockyardmc/scroll/serializers/JsonToComponentSerializer.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,23 @@ package io.github.dockyardmc.scroll.serializers
22

33
import io.github.dockyardmc.scroll.Component
44
import kotlinx.serialization.json.Json
5+
import kotlinx.serialization.json.JsonElement
6+
import kotlinx.serialization.json.JsonPrimitive
7+
import kotlinx.serialization.json.JsonTransformingSerializer
8+
import kotlinx.serialization.json.buildJsonObject
59

610
object JsonToComponentSerializer {
711
fun serialize(json: String): Component {
8-
return Json.decodeFromString<Component>(json)
12+
return Json.decodeFromString(ComponentDeserializer(), json)
13+
}
14+
}
15+
16+
internal class ComponentDeserializer : JsonTransformingSerializer<Component>(Component.generatedSerializer()) {
17+
override fun transformDeserialize(element: JsonElement): JsonElement = when (element) {
18+
is JsonPrimitive -> buildJsonObject {
19+
put("text", element)
20+
}
21+
22+
else -> element
923
}
1024
}

src/test/kotlin/JsonSerializationTests.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import io.github.dockyardmc.scroll.ClickEvent
22
import io.github.dockyardmc.scroll.Component
33
import io.github.dockyardmc.scroll.serializers.JsonToComponentSerializer
44
import io.github.dockyardmc.scroll.extensions.toComponent
5+
import org.junit.jupiter.api.assertDoesNotThrow
56
import kotlin.test.Test
67
import kotlin.test.assertEquals
78

@@ -43,4 +44,13 @@ class JsonSerializationTests {
4344

4445
assertEquals(input.toJson(), expected)
4546
}
47+
48+
@Test
49+
fun testJsonStringToComponent() {
50+
val input = "\"test_text\""
51+
val expected = Component(text = "test_text")
52+
53+
val result = assertDoesNotThrow { JsonToComponentSerializer.serialize(input) }
54+
assertEquals(expected.toJson(), result.toJson())
55+
}
4656
}

0 commit comments

Comments
 (0)