File tree Expand file tree Collapse file tree 5 files changed +53
-1
lines changed
commonMain/kotlin/dev/dimension/flare/data/network/misskey/api
commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model Expand file tree Collapse file tree 5 files changed +53
-1
lines changed Original file line number Diff line number Diff line change 1515
1616package dev.dimension.flare.data.network.misskey.api.model
1717
18+ import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819import kotlinx.serialization.Contextual
1920import kotlinx.serialization.SerialName
2021import kotlinx.serialization.Serializable
@@ -54,5 +55,6 @@ internal data class Note(
5455 @SerialName(value = " uri" ) val uri : kotlin.String? = null ,
5556 @SerialName(value = " url" ) val url : kotlin.String? = null ,
5657 @SerialName(value = " myReaction" ) val myReaction : kotlin.String? = null ,
58+ @Serializable(with = MisskeyEmojiMapSerializer ::class )
5759 @SerialName(value = " emojis" ) val emojis : Map <kotlin.String , kotlin.String > = emptyMap(),
5860)
Original file line number Diff line number Diff line change 1515
1616package dev.dimension.flare.data.network.misskey.api.model
1717
18+ import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819import kotlinx.serialization.Contextual
1920import kotlinx.serialization.SerialName
2021import kotlinx.serialization.Serializable
@@ -102,6 +103,7 @@ internal data class User(
102103 @SerialName(value = "email") val email: kotlin.String? = null,
103104 @SerialName(value = "emailVerified") val emailVerified: kotlin.Boolean? = null,
104105 @SerialName(value = "securityKeysList") val securityKeysList: kotlin.collections.List<kotlin.String>? = null,
106+ @Serializable(with = MisskeyEmojiMapSerializer::class)
105107 @SerialName(value = "emojis") val emojis: Map<kotlin.String, kotlin.String> = emptyMap(),
106108) {
107109 /**
Original file line number Diff line number Diff line change 1515
1616package dev.dimension.flare.data.network.misskey.api.model
1717
18+ import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819import kotlinx.serialization.SerialName
1920import kotlinx.serialization.Serializable
2021
@@ -36,7 +37,9 @@ internal data class UserLite(
3637 @SerialName(value = " isModerator" ) val isModerator : kotlin.Boolean? = false ,
3738 @SerialName(value = " isBot" ) val isBot : kotlin.Boolean? = null ,
3839 @SerialName(value = " isCat" ) val isCat : kotlin.Boolean? = null ,
39- @SerialName(value = " emojis" ) val emojis : Map <kotlin.String , kotlin.String > = emptyMap(),
40+ @SerialName(value = " emojis" )
41+ @Serializable(with = MisskeyEmojiMapSerializer ::class )
42+ val emojis : Map <kotlin.String , kotlin.String > = emptyMap(),
4043) {
4144 /* *
4245 * *
Original file line number Diff line number Diff line change 1+ package dev.dimension.flare.data.network.misskey.api.serializer
2+
3+ import kotlinx.serialization.ExperimentalSerializationApi
4+ import kotlinx.serialization.builtins.MapSerializer
5+ import kotlinx.serialization.builtins.serializer
6+ import kotlinx.serialization.json.JsonArray
7+ import kotlinx.serialization.json.JsonElement
8+ import kotlinx.serialization.json.JsonNull
9+ import kotlinx.serialization.json.JsonObject
10+ import kotlinx.serialization.json.JsonTransformingSerializer
11+
12+ @OptIn(ExperimentalSerializationApi ::class )
13+ internal object MisskeyEmojiMapSerializer :
14+ JsonTransformingSerializer <Map <String , String >>(MapSerializer (String .serializer(), String .serializer())) {
15+ override fun transformDeserialize (element : JsonElement ): JsonElement =
16+ when (element) {
17+ is JsonObject -> element
18+ is JsonArray , JsonNull -> JsonObject (emptyMap())
19+ else -> JsonObject (emptyMap())
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ package dev.dimension.flare.data.network.misskey.api.model
2+
3+ import dev.dimension.flare.common.JSON
4+ import kotlinx.serialization.decodeFromString
5+ import kotlin.test.Test
6+ import kotlin.test.assertEquals
7+
8+ class UserLiteTest {
9+ @Test
10+ fun emojisArrayIsTreatedAsEmptyMap () {
11+ val payload =
12+ """
13+ {
14+ "id": "user-id",
15+ "username": "sample",
16+ "emojis": []
17+ }
18+ """ .trimIndent()
19+
20+ val userLite = JSON .decodeFromString(UserLite .serializer(), payload)
21+
22+ assertEquals(emptyMap(), userLite.emojis)
23+ }
24+ }
You can’t perform that action at this time.
0 commit comments