KotlinPublicationScriptsBui.../src/main/kotlin/com/insanusmokrassar/kmppscriptbuilder/models/Config.kt

73 lines
2.4 KiB
Kotlin

package com.insanusmokrassar.kmppscriptbuilder.models
import com.insanusmokrassar.kmppscriptbuilder.export.jvm_only.buildJvmOnlyMavenConfig
import com.insanusmokrassar.kmppscriptbuilder.export.mpp.buildMultiplatformMavenConfig
import kotlinx.serialization.*
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable(ProjectTypeSerializer::class)
sealed class ProjectType {
abstract val name: String
// abstract fun buildBintrayGradleConfig(bintrayConfig: BintrayConfig, licenses: List<License>): String
abstract fun buildMavenGradleConfig(mavenConfig: MavenConfig, licenses: List<License>): String
}
@Serializer(ProjectType::class)
internal object ProjectTypeSerializer : KSerializer<ProjectType> {
override val descriptor: SerialDescriptor = String.serializer().descriptor
override fun deserialize(decoder: Decoder): ProjectType {
return when (decoder.decodeString()) {
JVMProjectType.name -> JVMProjectType
else -> MultiplatformProjectType
}
}
override fun serialize(encoder: Encoder, value: ProjectType) {
encoder.encodeString(value.name)
}
}
object MultiplatformProjectType : ProjectType() {
override val name: String = "Multiplatform"
// override fun buildBintrayGradleConfig(
// bintrayConfig: BintrayConfig,
// licenses: List<License>
// ): String = bintrayConfig.buildMultiplatformGradleConfig(
// licenses
// )
override fun buildMavenGradleConfig(
mavenConfig: MavenConfig,
licenses: List<License>
): String = mavenConfig.buildMultiplatformMavenConfig(
licenses
)
}
object JVMProjectType : ProjectType() {
override val name: String = "JVM"
// override fun buildBintrayGradleConfig(
// bintrayConfig: BintrayConfig,
// licenses: List<License>
// ): String = bintrayConfig.buildJvmOnlyGradleConfig(
// licenses
// )
override fun buildMavenGradleConfig(
mavenConfig: MavenConfig,
licenses: List<License>
): String = mavenConfig.buildJvmOnlyMavenConfig(
licenses
)
}
@Serializable
data class Config(
val licenses: List<License>,
val mavenConfig: MavenConfig,
val type: ProjectType = MultiplatformProjectType
)