diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-09-14 16:37:57 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-09-14 16:37:57 +0200 |
| commit | 9abe9f46f04f188037687adb2740b32220ad21b2 (patch) | |
| tree | 48dbd9cdf48c59853310c0b2e9bc59801522400e /src/main/kotlin/util/json | |
| parent | 2851c1d6834fafdaeb009dce2a3485df1388907e (diff) | |
| download | Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.tar.gz Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.tar.bz2 Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.zip | |
snapshot
Diffstat (limited to 'src/main/kotlin/util/json')
| -rw-r--r-- | src/main/kotlin/util/json/jsonConversion.kt | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/kotlin/util/json/jsonConversion.kt b/src/main/kotlin/util/json/jsonConversion.kt new file mode 100644 index 0000000..899ae11 --- /dev/null +++ b/src/main/kotlin/util/json/jsonConversion.kt @@ -0,0 +1,66 @@ +package moe.nea.firmament.util.json + +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonNull +import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive +import com.google.gson.internal.LazilyParsedNumber +import kotlin.collections.map + + +fun JsonElement.intoKotlinJson(): kotlinx.serialization.json.JsonElement { + when (this) { + is JsonNull -> return kotlinx.serialization.json.JsonNull + is JsonObject -> { + return kotlinx.serialization.json.JsonObject( + this.entrySet() + .associate { it.key to it.value.intoKotlinJson() }) + } + + is JsonArray -> { + return kotlinx.serialization.json.JsonArray(this.map { it.intoKotlinJson() }) + } + + is JsonPrimitive -> { + if (this.isString) + return kotlinx.serialization.json.JsonPrimitive(this.asString) + if (this.isBoolean) + return kotlinx.serialization.json.JsonPrimitive(this.asBoolean) + return kotlinx.serialization.json.JsonPrimitive(this.asNumber) + } + + else -> error("Unknown json variant $this") + } +} + +fun kotlinx.serialization.json.JsonElement.intoGson(): JsonElement { + when (this) { + is kotlinx.serialization.json.JsonNull -> return JsonNull.INSTANCE + is kotlinx.serialization.json.JsonPrimitive -> { + if (this.isString) + return JsonPrimitive(this.content) + if (this.content == "true") + return JsonPrimitive(true) + if (this.content == "false") + return JsonPrimitive(false) + return JsonPrimitive(LazilyParsedNumber(this.content)) + } + + is kotlinx.serialization.json.JsonObject -> { + val obj = JsonObject() + for ((k, v) in this) { + obj.add(k, v.intoGson()) + } + return obj + } + + is kotlinx.serialization.json.JsonArray -> { + val arr = JsonArray() + for (v in this) { + arr.add(v.intoGson()) + } + return arr + } + } +} |
