From dd15ac064327615283206d86fbe9a80e95d3eb82 Mon Sep 17 00:00:00 2001 From: Yuichiro Kinoshita Date: Thu, 23 Nov 2023 18:40:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=83=95=E3=82=A9=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=82=AF=E5=8F=AF=E8=83=BD=E3=81=AASerializa?= =?UTF-8?q?ble=E5=9F=BA=E5=BA=95=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=81=97=E3=81=9F=E3=80=82=E3=81=93=E3=82=8C?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6=E8=AA=95=E7=94=9F=E6=97=A5?= =?UTF-8?q?=E3=82=92=E6=AD=A3=E3=81=97=E3=81=8F=E8=A1=A8=E7=A4=BA=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../milktea/api/misskey/users/UserDTO.kt | 6 ++++- .../FallbackDefaultValueSerializer.kt | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 modules/common/src/main/java/net/pantasystem/milktea/common/serializations/FallbackDefaultValueSerializer.kt diff --git a/modules/api/src/main/java/net/pantasystem/milktea/api/misskey/users/UserDTO.kt b/modules/api/src/main/java/net/pantasystem/milktea/api/misskey/users/UserDTO.kt index cb31594cc7..8894d1cdd1 100644 --- a/modules/api/src/main/java/net/pantasystem/milktea/api/misskey/users/UserDTO.kt +++ b/modules/api/src/main/java/net/pantasystem/milktea/api/misskey/users/UserDTO.kt @@ -4,10 +4,12 @@ package net.pantasystem.milktea.api.misskey.users import kotlinx.datetime.Instant import kotlinx.datetime.LocalDate import kotlinx.serialization.SerialName +import kotlinx.serialization.builtins.nullable import net.pantasystem.milktea.api.misskey.emoji.CustomEmojiNetworkDTO import net.pantasystem.milktea.api.misskey.emoji.CustomEmojisTypeSerializer import net.pantasystem.milktea.api.misskey.emoji.EmojisType import net.pantasystem.milktea.api.misskey.notes.NoteDTO +import net.pantasystem.milktea.common.serializations.FallbackDefaultValueSerializer import java.io.Serializable /** @@ -104,7 +106,7 @@ data class UserDTO( val fields: List? = null, @SerialName("birthday") - @kotlinx.serialization.Transient + @kotlinx.serialization.Serializable(with = BirthdaySerializer::class) val birthday: LocalDate? = null, @SerialName("createdAt") @@ -185,3 +187,5 @@ data class UserDTO( @SerialName("public") Public, @SerialName("followers") Followers, @SerialName("private") Private, } } + +private object BirthdaySerializer : FallbackDefaultValueSerializer(LocalDate.serializer().nullable, null) \ No newline at end of file diff --git a/modules/common/src/main/java/net/pantasystem/milktea/common/serializations/FallbackDefaultValueSerializer.kt b/modules/common/src/main/java/net/pantasystem/milktea/common/serializations/FallbackDefaultValueSerializer.kt new file mode 100644 index 0000000000..db79655947 --- /dev/null +++ b/modules/common/src/main/java/net/pantasystem/milktea/common/serializations/FallbackDefaultValueSerializer.kt @@ -0,0 +1,27 @@ +package net.pantasystem.milktea.common.serializations + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +abstract class FallbackDefaultValueSerializer(private val serializer: KSerializer, private val defaultValue: T) : + KSerializer { + + // Alternative to taking values in param, take clazz: Class + // - private val values = clazz.enumConstants + override val descriptor: SerialDescriptor = serializer.descriptor + + + override fun serialize(encoder: Encoder, value: T) { + serializer.serialize(encoder, value) + } + + override fun deserialize(decoder: Decoder): T { + return try { + serializer.deserialize(decoder) + } catch (e: Exception) { + defaultValue + } + } +}