core/server/src/main/java/dev/inmo/postssystem/server/Config.kt

36 lines
1.1 KiB
Kotlin

package dev.inmo.postssystem.server
import dev.inmo.postssystem.features.common.server.ServerModuleLoader
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import java.io.File
@Serializable
data class Config(
val host: String = "0.0.0.0",
val port: Int = 8080,
@SerialName("database")
val databaseConfig: DatabaseConfig = DatabaseConfig(),
@SerialName("auth")
val authConfig: AuthConfig = AuthConfig(),
val filesFolder: String,
@SerialName("modules")
val modulesClassPaths: List<String>,
val debugMode: Boolean = false
) {
val filesFolderFile: File
get() = File(filesFolder)
@kotlinx.serialization.Transient
val modules by lazy {
modulesClassPaths.mapNotNull { moduleClassPath ->
runCatching {
Class.forName(moduleClassPath).constructors.firstOrNull { it.parameterCount == 0 } ?.newInstance() as ServerModuleLoader
}.onFailure {
println("Unable to load $moduleClassPath")
it.printStackTrace()
}.getOrNull()
}
}
}