KStarbound/src/main/kotlin/ru/dbotthepony/kstarbound/VersionRegistry.kt

32 lines
1.0 KiB
Kotlin

package ru.dbotthepony.kstarbound
import com.google.gson.JsonElement
import com.google.gson.TypeAdapter
import com.google.gson.stream.JsonReader
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap
import ru.dbotthepony.kstarbound.json.VersionedJson
object VersionRegistry {
private val versions = Object2IntOpenHashMap<String>()
fun currentVersion(name: String): Int {
return versions.getInt(name)
}
fun make(name: String, contents: JsonElement): VersionedJson {
return VersionedJson(name, currentVersion(name), contents)
}
fun <T> load(name: String, reader: JsonReader, adapter: TypeAdapter<T>): T {
val read = this.adapter.read(reader) ?: throw NullPointerException("Expected versioned json $name, but found null")
if (read.version != currentVersion(name)) {
throw IllegalStateException("NYI: Migrating $name from ${read.version} to ${currentVersion(name)}")
}
return adapter.fromJsonTree(read.content)
}
private val adapter by lazy { Starbound.gson.getAdapter(VersionedJson::class.java) }
}