disbrowser/src/jvmMain/kotlin/com/smallhacker/disbrowser/util/json.kt

28 lines
976 B
Kotlin
Raw Normal View History

2019-01-11 03:19:08 +00:00
package com.smallhacker.disbrowser.util
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
2019-01-20 10:11:30 +00:00
import com.smallhacker.disbrowser.memory.SnesAddress
2019-01-11 03:19:08 +00:00
import java.nio.file.Path
val jsonMapper: ObjectMapper by lazy {
jacksonObjectMapper()
2019-01-20 10:11:30 +00:00
.addMapper(
{ gen, _ -> gen.writeString(this.toSimpleString()) },
{ SnesAddress.parse(text)!! },
{ SnesAddress.parse(this)!! })
2019-01-11 03:19:08 +00:00
}
interface JsonFile<T> {
fun load(): T
fun save(value: T)
}
2019-01-11 05:09:12 +00:00
inline fun <reified T> jsonFile(path: Path, prettyPrint: Boolean = false): JsonFile<T> {
val writer = if (prettyPrint) jsonMapper.writerWithDefaultPrettyPrinter() else jsonMapper.writer()
2019-01-11 03:19:08 +00:00
return object : JsonFile<T> {
override fun load() = jsonMapper.readValue<T>(path.toFile())
2019-01-11 05:09:12 +00:00
override fun save(value: T) = writer.writeValue(path.toFile(), value)
2019-01-11 03:19:08 +00:00
}
}