From 26f84b9b271ddf92243a1d9ddd258eb33f4a720b Mon Sep 17 00:00:00 2001 From: LamGC Date: Sat, 23 Apr 2022 15:17:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=94=B9=E8=BF=9B=20JsonObject=20?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E6=96=B9=E5=BC=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 设计 JsonNull 用于在合并 CallbackData 时移除相关数据. --- src/main/kotlin/Utils.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/Utils.kt b/src/main/kotlin/Utils.kt index b520c0e..026ef14 100644 --- a/src/main/kotlin/Utils.kt +++ b/src/main/kotlin/Utils.kt @@ -7,6 +7,7 @@ import com.google.common.cache.Cache import com.google.common.cache.CacheBuilder import com.google.gson.Gson import com.google.gson.JsonElement +import com.google.gson.JsonNull import com.google.gson.JsonObject import com.google.gson.annotations.SerializedName import com.oracle.bmc.ConfigFileReader.ConfigFile @@ -341,7 +342,14 @@ data class InlineKeyboardCallback( } val nextExtraData = this.extraData.deepCopy() for (key in newExtraData.keySet()) { - nextExtraData.add(key, newExtraData[key]) + val value = newExtraData[key] + if (value == JsonNull.INSTANCE) { + if (nextExtraData.has(key)) { + nextExtraData.remove(key) + } + } else { + nextExtraData.add(key, value) + } } return InlineKeyboardCallback(newAction, nextExtraData) } @@ -416,6 +424,14 @@ class JsonObjectBuilder(private val jsonObject: JsonObject) { operator fun String.plusAssign(value: Any) { jsonObject.add(this, gson.toJsonTree(value)) } + + fun String.delete(setNull: Boolean = false) { + if (setNull) { + jsonObject.add(this, JsonNull.INSTANCE) + } else { + jsonObject.remove(this) + } + } } fun jsonObjectOf(jsonObject: JsonObject = JsonObject(), block: JsonObjectBuilder.() -> Unit): JsonObject {