From c4e4985b8b96ed156851c6be6d4a8d5e110c3040 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Fri, 13 Dec 2024 17:42:27 +0100 Subject: Add error reporting framework --- .../moe/nea/ledger/utils/telemetry/Context.kt | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt (limited to 'src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt') diff --git a/src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt b/src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt new file mode 100644 index 0000000..3c30a52 --- /dev/null +++ b/src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt @@ -0,0 +1,57 @@ +package moe.nea.ledger.utils.telemetry + +import com.google.gson.JsonObject + +class Context(val data: MutableMap = mutableMapOf()) : ContextValue.Collatable { + + inline fun getT(key: String): T? { + return get(key) as? T + } + + fun get(key: String): ContextValue? { + return data[key] + } + + fun add(key: String, value: ContextValue) { + data[key] = value + } + + @Suppress("NOTHING_TO_INLINE") + private inline fun > cope( + left: ContextValue.Collatable, + right: ContextValue + ): ContextValue { + return try { + left.combineWith(right as T) + } catch (ex: Exception) { + // TODO: cope with this better + right + } + } + + override fun combineWith(overrides: Context): Context { + val copy = data.toMutableMap() + for ((key, overrideValue) in overrides.data) { + copy.merge(key, overrideValue) { old, new -> + if (old is ContextValue.Collatable<*>) { + cope(old, new) + } else { + new + } + } + } + return Context(copy) + } + + override fun actualize(): Context { + return this + } + + override fun serialize(): JsonObject { + val obj = JsonObject() + data.forEach { (k, v) -> + obj.add(k, v.serialize()) + } + return obj + } +} \ No newline at end of file -- cgit