mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-12 03:24:06 +09:00
93 lines
3.3 KiB
Kotlin
93 lines
3.3 KiB
Kotlin
package net.torvald.terrarum.utils
|
|
|
|
import com.badlogic.gdx.utils.JsonReader
|
|
import com.badlogic.gdx.utils.JsonValue
|
|
import net.torvald.terrarum.App.printdbg
|
|
import java.io.Reader
|
|
|
|
/**
|
|
* Created by minjaesong on 2016-02-15.
|
|
*/
|
|
object JsonFetcher {
|
|
|
|
private var jsonString: StringBuffer? = null
|
|
|
|
@Throws(java.io.IOException::class)
|
|
operator fun invoke(jsonFilePath: String): JsonValue {
|
|
jsonString = StringBuffer() // reset buffer every time it called
|
|
readJsonFileAsString(jsonFilePath)
|
|
|
|
printdbg(this, "Reading JSON $jsonFilePath")
|
|
|
|
if (jsonString == null) throw Error("[JsonFetcher] jsonString is null!")
|
|
|
|
return JsonReader().parse(jsonString.toString())
|
|
}
|
|
|
|
@Throws(java.io.IOException::class)
|
|
operator fun invoke(jsonFile: java.io.File): JsonValue {
|
|
jsonString = StringBuffer() // reset buffer every time it called
|
|
readJsonFileAsString(jsonFile.canonicalPath)
|
|
|
|
printdbg(this, "Reading JSON ${jsonFile.path}")
|
|
|
|
if (jsonString == null) throw Error("[JsonFetcher] jsonString is null!")
|
|
|
|
return JsonReader().parse(jsonString.toString())
|
|
}
|
|
|
|
fun readFromJsonString(stringReader: Reader): JsonValue {
|
|
return JsonReader().parse(stringReader.readText())
|
|
}
|
|
|
|
@Throws(java.io.IOException::class)
|
|
private fun readJsonFileAsString(path: String) {
|
|
java.nio.file.Files.lines(java.nio.file.FileSystems.getDefault().getPath(path)).forEach(
|
|
{ jsonString!!.append(it) }
|
|
) // JSON does not require line break
|
|
|
|
}
|
|
|
|
/**
|
|
* Iterates [JsonValue] over its siblings.
|
|
*
|
|
* @param map JsonValue to iterate over
|
|
* @param action A `function(`Name of the sibling or a stringified integer if the `map` is an array`, `JsonValue representation of the sibling`)` -> `Unit`
|
|
*/
|
|
fun forEachSiblings(map: JsonValue, action: (String, JsonValue) -> Unit) {
|
|
var counter = 0
|
|
var entry = map.child
|
|
while (entry != null) {
|
|
action(entry.name ?: "$counter", entry)
|
|
entry = entry.next
|
|
counter += 1
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Iterates [JsonValue] over its siblings.
|
|
*
|
|
* @param map JsonValue to iterate over
|
|
* @param action A `function(index, `Name of the sibling or a stringified integer if the `map` is an array`, `JsonValue representation of the sibling`)` -> `Unit`
|
|
*/
|
|
fun forEachSiblingsIndexed(map: JsonValue, action: (Int, String, JsonValue) -> Unit) {
|
|
var counter = 0
|
|
var entry = map.child
|
|
while (entry != null) {
|
|
action(counter, entry.name ?: "$counter", entry)
|
|
entry = entry.next
|
|
counter += 1
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Iterates [JsonValue] over its siblings.
|
|
* @param action A function(`Name of the sibling or a stringified integer if the `map` is an array`, `JsonValue representation of the sibling`)` -> `Unit`
|
|
*/
|
|
fun JsonValue.forEachSiblings(action: (String, JsonValue) -> Unit) = JsonFetcher.forEachSiblings(this, action)
|
|
/**
|
|
* Iterates [JsonValue] over its siblings.
|
|
* @param action A `function(index, `Name of the sibling or a stringified integer if the `map` is an array`, `JsonValue representation of the sibling`)` -> `Unit`
|
|
*/
|
|
fun JsonValue.forEachSiblingsIndexed(action: (Int, String, JsonValue) -> Unit) = JsonFetcher.forEachSiblingsIndexed(this, action) |