diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-09-28 19:48:11 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-10-13 18:26:42 +0200 |
| commit | 9b6c8f21f86385c993c0e34ba4b31348cae200cd (patch) | |
| tree | d310ffaf3e98af40c64d9895771026dd7ee4c56d /src/main/kotlin/util/data/IDataHolder.kt | |
| parent | e8a42a056cb0209f8bbeb35dd74f42e5c2d8bd62 (diff) | |
| download | Firmament-9b6c8f21f86385c993c0e34ba4b31348cae200cd.tar.gz Firmament-9b6c8f21f86385c993c0e34ba4b31348cae200cd.tar.bz2 Firmament-9b6c8f21f86385c993c0e34ba4b31348cae200cd.zip | |
fix: improve config backups
Diffstat (limited to 'src/main/kotlin/util/data/IDataHolder.kt')
| -rw-r--r-- | src/main/kotlin/util/data/IDataHolder.kt | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/main/kotlin/util/data/IDataHolder.kt b/src/main/kotlin/util/data/IDataHolder.kt index 541fc1b..de6dff8 100644 --- a/src/main/kotlin/util/data/IDataHolder.kt +++ b/src/main/kotlin/util/data/IDataHolder.kt @@ -21,6 +21,7 @@ sealed class IDataHolder<T> { abstract fun keys(): Collection<T> abstract fun saveTo(key: T): JsonObject abstract fun loadFrom(key: T, jsonObject: JsonObject) + abstract fun explicitDefaultLoad() abstract fun clear() abstract val storageClass: ConfigStorageClass } @@ -28,18 +29,21 @@ sealed class IDataHolder<T> { open class ProfileKeyedConfig<T>( val prefix: String, val serializer: KSerializer<T>, - val default: () -> T, + val default: () -> T & Any, ) : IDataHolder<UUID>() { override val storageClass: ConfigStorageClass get() = ConfigStorageClass.PROFILE private var _data: MutableMap<UUID, T>? = null - val data - get() = _data!!.let { map -> - map[SBData.profileIdOrNil] - ?: default().also { map[SBData.profileIdOrNil] = it } - } ?: error("Config $this not loaded — forgot to register?") + val data: T & Any + get() { + val map = _data ?: error("Config $this not loaded — forgot to register?") + map[SBData.profileIdOrNil]?.let { return it } + val newValue = default() + map[SBData.profileIdOrNil] = newValue + return newValue + } override fun keys(): Collection<UUID> { return _data!!.keys @@ -53,13 +57,22 @@ open class ProfileKeyedConfig<T>( } override fun loadFrom(key: UUID, jsonObject: JsonObject) { - (_data ?: mutableMapOf<UUID, T>().also { _data = it })[key] = + var map = _data + if (map == null) { + map = mutableMapOf() + _data = map + } + map[key] = jsonObject[prefix] ?.let { Firmament.json.decodeFromJsonElement(serializer, it) } ?: default() } + override fun explicitDefaultLoad() { + _data = mutableMapOf() + } + override fun clear() { _data = null } @@ -79,6 +92,10 @@ abstract class GenericConfig<T>( return listOf(Unit) } + override fun explicitDefaultLoad() { + _data = default() + } + open fun onLoad() { } |
