Skip to content

Commit 36e26a9

Browse files
authored
Merge pull request #1571 from DimensionDev/bugfix/misskey_login
Add MisskeyEmojiMapSerializer and update models to use it for emojis
2 parents 339237f + 8dec54b commit 36e26a9

File tree

5 files changed

+53
-1
lines changed

5 files changed

+53
-1
lines changed

shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package dev.dimension.flare.data.network.misskey.api.model
1717

18+
import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819
import kotlinx.serialization.Contextual
1920
import kotlinx.serialization.SerialName
2021
import 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
)

shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package dev.dimension.flare.data.network.misskey.api.model
1717

18+
import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819
import kotlinx.serialization.Contextual
1920
import kotlinx.serialization.SerialName
2021
import 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
/**

shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package dev.dimension.flare.data.network.misskey.api.model
1717

18+
import dev.dimension.flare.data.network.misskey.api.serializer.MisskeyEmojiMapSerializer
1819
import kotlinx.serialization.SerialName
1920
import 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
* *
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
}

0 commit comments

Comments
 (0)