aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/firmament/gui/config/storage/ConfigFixEvent.kt
blob: 07148d5c5e0cc5a65c7cb9f743c9f9d2c5194abf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package moe.nea.firmament.gui.config.storage

import com.google.gson.JsonElement
import com.google.gson.JsonObject
import moe.nea.firmament.events.FirmamentEvent
import moe.nea.firmament.events.FirmamentEventBus

data class ConfigFixEvent(
	val storageClass: ConfigStorageClass,
	val toVersion: Int,
	var data: JsonObject,
) : FirmamentEvent() {
	companion object : FirmamentEventBus<ConfigFixEvent>() {

	}
	fun on(
		toVersion: Int,
		storageClass: ConfigStorageClass,
		block: ConfigEditor.() -> Unit
	) {
		require(toVersion <= FirmamentConfigLoader.currentConfigVersion)
		if (this.toVersion == toVersion && this.storageClass == storageClass) {
			block(ConfigEditor(listOf(object : JsonPointer {
				override fun get(): JsonObject {
					return data
				}

				override fun set(value: JsonElement) {
					data = value as JsonObject
				}

				override fun toString(): String {
					return "ConfigRoot($storageClass)"
				}
			})))
		}
	}
}