|
@@ -1,10 +1,10 @@
|
|
|
/*
|
|
|
* Copyright 2019-2021 Mamoe Technologies and contributors.
|
|
|
*
|
|
|
- * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
|
- * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
|
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
|
|
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
|
|
*
|
|
|
- * https://github.com/mamoe/mirai/blob/master/LICENSE
|
|
|
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
|
|
|
*/
|
|
|
|
|
|
package net.mamoe.mirai.internal.message
|
|
@@ -12,9 +12,7 @@ package net.mamoe.mirai.internal.message
|
|
|
import kotlinx.serialization.KSerializer
|
|
|
import kotlinx.serialization.SerialName
|
|
|
import kotlinx.serialization.Serializable
|
|
|
-import kotlinx.serialization.descriptors.*
|
|
|
-import kotlinx.serialization.encoding.Decoder
|
|
|
-import kotlinx.serialization.encoding.Encoder
|
|
|
+import kotlinx.serialization.descriptors.buildClassSerialDescriptor
|
|
|
import kotlinx.serialization.modules.PolymorphicModuleBuilder
|
|
|
import kotlinx.serialization.modules.SerializersModule
|
|
|
import kotlinx.serialization.modules.overwriteWith
|
|
@@ -23,6 +21,7 @@ import net.mamoe.mirai.Mirai
|
|
|
import net.mamoe.mirai.message.MessageSerializers
|
|
|
import net.mamoe.mirai.message.data.*
|
|
|
import net.mamoe.mirai.utils.MiraiInternalApi
|
|
|
+import net.mamoe.mirai.utils.map
|
|
|
import net.mamoe.mirai.utils.takeElementsFrom
|
|
|
import kotlin.reflect.KClass
|
|
|
import kotlin.reflect.full.allSuperclasses
|
|
@@ -217,33 +216,4 @@ internal object MessageSerializersImpl : MessageSerializers {
|
|
|
override fun registerSerializers(serializersModule: SerializersModule) {
|
|
|
serializersModuleField = serializersModule.overwriteWith(serializersModule)
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-internal inline fun <T, R> KSerializer<T>.map(
|
|
|
- resultantDescriptor: SerialDescriptor,
|
|
|
- crossinline deserialize: T.(T) -> R,
|
|
|
- crossinline serialize: R.(R) -> T,
|
|
|
-): KSerializer<R> {
|
|
|
- return object : KSerializer<R> {
|
|
|
- override val descriptor: SerialDescriptor get() = resultantDescriptor
|
|
|
- override fun deserialize(decoder: Decoder): R = this@map.deserialize(decoder).let { deserialize(it, it) }
|
|
|
- override fun serialize(encoder: Encoder, value: R) = serialize(encoder, value.let { serialize(it, it) })
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-internal inline fun <T, R> KSerializer<T>.mapPrimitive(
|
|
|
- serialName: String,
|
|
|
- crossinline deserialize: (T) -> R,
|
|
|
- crossinline serialize: R.(R) -> T,
|
|
|
-): KSerializer<R> {
|
|
|
- val kind = this@mapPrimitive.descriptor.kind
|
|
|
- check(kind is PrimitiveKind) { "kind must be PrimitiveKind but found $kind" }
|
|
|
- return object : KSerializer<R> {
|
|
|
- override fun deserialize(decoder: Decoder): R =
|
|
|
- this@mapPrimitive.deserialize(decoder).let(deserialize)
|
|
|
-
|
|
|
- override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(serialName, kind)
|
|
|
- override fun serialize(encoder: Encoder, value: R) =
|
|
|
- this@mapPrimitive.serialize(encoder, value.let { serialize(it, it) })
|
|
|
- }
|
|
|
}
|