From 9463ee0dfa9c4a0631363f548f81029239241466 Mon Sep 17 00:00:00 2001 From: NoMathExpectation <85624722+NoMathExpectation@users.noreply.github.com> Date: Sun, 8 Mar 2026 02:58:02 +0800 Subject: [PATCH] Fixed serialName in TransformSerializer. --- .../cn/rdlevel/rdkt/core/data/RowPattern.kt | 2 +- .../core/data/SelectedRoomsAndTopLayer.kt | 21 +++++++++++++------ .../core/data/sound/audioGroup/AudioGroup.kt | 2 +- .../core/events/PulseFreeTimeBeatEvent.kt | 3 ++- .../rdkt/core/events/SetGameSoundEvent.kt | 5 ++++- .../rdlevel/rdkt/core/events/SetRowXsEvent.kt | 2 +- .../core/serialization/TransformSerializer.kt | 8 +++++-- 7 files changed, 30 insertions(+), 13 deletions(-) diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/RowPattern.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/RowPattern.kt index a2b7067..b161e75 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/RowPattern.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/RowPattern.kt @@ -123,7 +123,7 @@ public class RowPattern { } @OptIn(RDKTInternalAPI::class) - public object Serializer : TransformSerializer(String.serializer()) { + public object Serializer : TransformSerializer("RowPattern", String.serializer()) { override fun toData(value: RowPattern): String { return value.pattern } diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/SelectedRoomsAndTopLayer.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/SelectedRoomsAndTopLayer.kt index 6d6a959..d033134 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/SelectedRoomsAndTopLayer.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/SelectedRoomsAndTopLayer.kt @@ -79,7 +79,10 @@ public sealed interface SelectedRoomsAndTopLayer { } public object Serializer : - TransformSerializer>(kotlinx.serialization.serializer()) { + TransformSerializer>( + "SelectedRoomsAndTopLayer", + kotlinx.serialization.serializer() + ) { override fun toData(value: SelectedRoomsAndTopLayer): Set { return value.rooms } @@ -128,7 +131,10 @@ private sealed class AbstractSelectedRoomsAndTopLayer : SelectedRoomsAndTopLayer @Serializable(SelectedRoomsOrTopLayer.Serializer::class) public sealed interface SelectedRoomsOrTopLayer : SelectedRoomsAndTopLayer { public object Serializer : - TransformSerializer>(SetSerializer(Int.serializer())) { + TransformSerializer>( + "SelectedRoomsOrTopLayer", + SetSerializer(Int.serializer()) + ) { override fun toData(value: SelectedRoomsOrTopLayer): Set { return value.rooms } @@ -161,7 +167,10 @@ public sealed interface SingleSelectedRoomOrTopLayer : SelectedRoomsOrTopLayer { } public object Serializer : - TransformSerializer>(SetSerializer(Int.serializer())) { + TransformSerializer>( + "SingleSelectedRoomOrTopLayer", + SetSerializer(Int.serializer()) + ) { override fun toData(value: SingleSelectedRoomOrTopLayer): Set { return value.rooms } @@ -214,7 +223,7 @@ public sealed interface SelectedRooms : SelectedRoomsOrTopLayer { } public object Serializer : - TransformSerializer>(SetSerializer(Int.serializer())) { + TransformSerializer>("SelectedRooms", SetSerializer(Int.serializer())) { override fun toData(value: SelectedRooms): Set { return value.rooms } @@ -248,7 +257,7 @@ public sealed interface SelectedTopLayer : SingleSelectedRoomOrTopLayer { } public object Serializer : - TransformSerializer>(SetSerializer(Int.serializer())) { + TransformSerializer>("SelectedTopLayer", SetSerializer(Int.serializer())) { override fun toData(value: SelectedTopLayer): Set { return value.rooms } @@ -285,7 +294,7 @@ public sealed interface SingleSelectedRoom : SingleSelectedRoomOrTopLayer, Selec } public object Serializer : - TransformSerializer>(SetSerializer(Int.serializer())) { + TransformSerializer>("SingleSelectedRoom", SetSerializer(Int.serializer())) { override fun toData(value: SingleSelectedRoom): Set { return value.rooms } diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/sound/audioGroup/AudioGroup.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/sound/audioGroup/AudioGroup.kt index c5d9bf0..e8f24d6 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/sound/audioGroup/AudioGroup.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/data/sound/audioGroup/AudioGroup.kt @@ -84,7 +84,7 @@ public abstract class AudioGroup( * @param soundType The type of sound group. */ public abstract class BaseSerializer(protected val soundType: String) : - TransformSerializer>(kotlinx.serialization.serializer()) { + TransformSerializer>(soundType, kotlinx.serialization.serializer()) { /** * Creates an instance of [T] from a map of subtype identifiers to [SubGroupAudioData]. */ diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/PulseFreeTimeBeatEvent.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/PulseFreeTimeBeatEvent.kt index 18cde95..33af2eb 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/PulseFreeTimeBeatEvent.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/PulseFreeTimeBeatEvent.kt @@ -58,7 +58,8 @@ public data class PulseFreeTimeBeatEvent @JvmOverloads constructor( public object Remove : Action("Remove") } - public object Serializer : TransformSerializer(Data.serializer()) { + public object Serializer : + TransformSerializer("PulseFreeTimeBeat", Data.serializer()) { override fun toData(value: PulseFreeTimeBeatEvent): Data { return Data.fromBase(value).apply { action = value.action.action diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetGameSoundEvent.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetGameSoundEvent.kt index 014ddfa..c2f24dd 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetGameSoundEvent.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetGameSoundEvent.kt @@ -66,7 +66,10 @@ public data class SetGameSoundEvent private constructor( public object Serializer : JsonTransformingSerializer(DataSerializer) { @OptIn(RDKTInternalAPI::class) private object DataSerializer : - TransformSerializer(generatedSerializer()) { + TransformSerializer( + generatedSerializer().descriptor.serialName, + generatedSerializer() + ) { override fun toData(value: SetGameSoundEvent) = value override fun fromData(data: SetGameSoundEvent): SetGameSoundEvent { diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetRowXsEvent.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetRowXsEvent.kt index c436f9e..a67dfa4 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetRowXsEvent.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/events/SetRowXsEvent.kt @@ -140,7 +140,7 @@ public data class SetRowXsEvent( } } - public object Serializer : TransformSerializer(Data.serializer()) { + public object Serializer : TransformSerializer("SetRowXs", Data.serializer()) { override fun toData(value: SetRowXsEvent): Data { return Data.fromBase(value).apply { pattern = value.pattern diff --git a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/serialization/TransformSerializer.kt b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/serialization/TransformSerializer.kt index 9a72977..8006a9d 100644 --- a/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/serialization/TransformSerializer.kt +++ b/core/src/commonMain/kotlin/cn/rdlevel/rdkt/core/serialization/TransformSerializer.kt @@ -18,10 +18,14 @@ import kotlinx.serialization.encoding.Encoder @RDKTInternalAPI @SubclassOptInRequired(RDKTInternalAPI::class) public abstract class TransformSerializer( + serialName: String, private val dataSerializer: KSerializer ) : KSerializer { - override val descriptor: SerialDescriptor - get() = dataSerializer.descriptor + override val descriptor: SerialDescriptor = if (dataSerializer.descriptor.serialName == serialName) { + dataSerializer.descriptor + } else { + SerialDescriptor(serialName, dataSerializer.descriptor) + } override fun serialize(encoder: Encoder, value: T) { val data = toData(value)