46 lines
1.6 KiB
Kotlin
46 lines
1.6 KiB
Kotlin
package scaffold
|
|
|
|
import com.electronwill.nightconfig.core.Config
|
|
import com.electronwill.nightconfig.core.UnmodifiableConfig
|
|
import com.electronwill.nightconfig.core.file.FileConfig
|
|
import java.nio.file.Path
|
|
|
|
data class GeneratorConfig(
|
|
val templates: List<String>,
|
|
val files: List<Path>,
|
|
val prompts: Map<String, List<PromptValue>>
|
|
)
|
|
|
|
fun Generator.loadConfig(): GeneratorConfig {
|
|
val config: UnmodifiableConfig = FileConfig.of(rootPath.resolve("config.toml")).apply { load() }
|
|
val templates = config.get<List<String>>("templates")
|
|
|
|
val prompts = mutableMapOf<String, MutableList<PromptValue>>()
|
|
val section = config.get<Any?>("prompt") ?: error("Missing prompt section")
|
|
if (section !is Config) error("Prompt section is not an object")
|
|
|
|
for ((subsectionName, subsection) in section.valueMap()) {
|
|
check(subsection is List<*>) { "prompts.$subsectionName is not a list of prompts" }
|
|
|
|
for (prompt in subsection) {
|
|
check(prompt is Config)
|
|
|
|
val promptValue = PromptValue(
|
|
name = prompt.get("name") ?: error("Missing name"),
|
|
info = prompt.get("info"),
|
|
type = prompt.getEnum("type", PromptType::class.java) ?: PromptType.String
|
|
)
|
|
|
|
val current = prompts.computeIfAbsent(subsectionName) { ArrayList() }
|
|
current += promptValue
|
|
}
|
|
|
|
}
|
|
|
|
val files = config.get<List<String>>("files").flatMap { path ->
|
|
if ("*" in path) FileGlob.listFiles(treeRoot, path)
|
|
else listOf(treeRoot.resolve(path))
|
|
}
|
|
|
|
return GeneratorConfig(templates, files, prompts)
|
|
} |