package starter.config import com.electronwill.nightconfig.core.UnmodifiableConfig import starter.* import com.electronwill.nightconfig.core.Config as NightConfig data class StarterConfig( val dependencies: List, val inputs: List, ) class Config(private val cfg: NightConfig) { @Suppress("UNCHECKED_CAST") private fun NightConfig.configMap(key: String) = this.get(key) ?.valueMap() as Map? ?: emptyMap() fun load(): StarterConfig { @Suppress("UNCHECKED_CAST") val versions = cfg.get("versions") ?.valueMap() as Map? ?: emptyMap() val repositories = cfg.configMap("repositories") .map { (name, values) -> Repository(name, values["url"]) } val dependencies = cfg.configMap("dependencies") .map { (name, values) -> val versionKey: String = values["version"] ?: name val version = versions[versionKey] ?: error("Missing version for $name") val repositoryName: String? = values["repository"] val repo = repositoryName?.let { repoName -> repositories.find { it.name == repoName } } Dependency( name = name, groupId = values["groupId"], artifactId = values["artifactId"] ?: name, version = Version(versionKey, version), default = values.getOrElse("default", false), category = values.getEnumOrElse("category", Category.Other), scope = values.getEnumOrElse("scope", Scope.Compile), logger = values["logger"], repository = repo, ) } val inputs = cfg.configMap("inputs") .map { (name, values) -> Input(name, values["display"], values["default"]) } return StarterConfig(dependencies, inputs) } }