All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ginloader.ksyml.1.1.0.source-code.Plugin.kt Maven / Gradle / Ivy

package ksyml

import com.charleskorn.kaml.*
import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.*
import org.snakeyaml.engine.v2.api.LoadSettings
import pluginloader.api.LoaderPlugin
import pluginloader.api.throwReadable
import java.io.File

val yaml = Yaml(configuration = YamlConfiguration(extensionDefinitionPrefix = "x-", strictMode = true))

fun  LoaderPlugin.decodeYaml(yml: String, serializer: KSerializer, file: String): T{
    try {
        return yaml.decodeFromString(serializer, yml)
    }catch (ex: Throwable){
        throwReadable("§c$file\n§7${ex.message}", ex)
    }
}

fun  LoaderPlugin.decodeYaml(file: File, serializer: KSerializer): T{
    return decodeYaml(file.readText(), serializer, file.name)
}

fun LoaderPlugin.yamlToJson(yaml: String): JsonObject {
    fun encodeToJson(node: Any?): JsonElement{
        return when(node){
            null -> JsonNull
            is String -> JsonPrimitive(node)
            is Number -> JsonPrimitive(node)
            is Boolean -> JsonPrimitive(node)
            is Map<*, *> -> {
                val map = HashMap(node.size)
                node.forEach{map[it.key.toString()] = encodeToJson(it.value)}
                JsonObject(map)
            }
            is List<*> -> {
                val list = ArrayList(node.size)
                node.forEach{list.add(encodeToJson(it))}
                JsonArray(list)
            }
            else -> error("Unknown subclass $node")
        }
    }
    return encodeToJson(rawYAML.loadFromString(yaml)) as JsonObject
}

private val rawYAML = org.snakeyaml.engine.v2.api.Load(LoadSettings.builder().build())




© 2015 - 2025 Weber Informatics LLC | Privacy Policy