Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .run/Run Tests.run.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Run Tests" type="JUnit" factoryName="JUnit">
<module name="Scroll.test" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="ALTERNATIVE_JRE_PATH" value="corretto-21" />
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
Expand Down
5 changes: 4 additions & 1 deletion src/main/kotlin/io/github/dockyardmc/scroll/Component.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package io.github.dockyardmc.scroll

import io.github.dockyardmc.scroll.serializers.ComponentDeserializer
import io.github.dockyardmc.scroll.serializers.ComponentToJsonSerializer
import io.github.dockyardmc.scroll.serializers.ComponentSerializer
import kotlinx.serialization.KeepGeneratedSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import net.kyori.adventure.nbt.CompoundBinaryTag

@Serializable
@KeepGeneratedSerializer
@Serializable(with = ComponentDeserializer::class)
open class Component(
var extra: MutableList<Component>? = null,
var keybind: String? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,23 @@ package io.github.dockyardmc.scroll.serializers

import io.github.dockyardmc.scroll.Component
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.JsonTransformingSerializer
import kotlinx.serialization.json.buildJsonObject

object JsonToComponentSerializer {
fun serialize(json: String): Component {
return Json.decodeFromString<Component>(json)
return Json.decodeFromString(ComponentDeserializer(), json)
}
}

internal class ComponentDeserializer : JsonTransformingSerializer<Component>(Component.generatedSerializer()) {
override fun transformDeserialize(element: JsonElement): JsonElement = when (element) {
is JsonPrimitive -> buildJsonObject {
put("text", element)
}

else -> element
}
}
10 changes: 10 additions & 0 deletions src/test/kotlin/JsonSerializationTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import io.github.dockyardmc.scroll.ClickEvent
import io.github.dockyardmc.scroll.Component
import io.github.dockyardmc.scroll.serializers.JsonToComponentSerializer
import io.github.dockyardmc.scroll.extensions.toComponent
import org.junit.jupiter.api.assertDoesNotThrow
import kotlin.test.Test
import kotlin.test.assertEquals

Expand Down Expand Up @@ -43,4 +44,13 @@ class JsonSerializationTests {

assertEquals(input.toJson(), expected)
}

@Test
fun testJsonStringToComponent() {
val input = "\"test_text\""
val expected = Component(text = "test_text")

val result = assertDoesNotThrow { JsonToComponentSerializer.serialize(input) }
assertEquals(expected.toJson(), result.toJson())
}
}
Loading