Zoltan Demant
09/14/2023, 7:04 AMlibs.versions.toml
somehow?Vampire
09/14/2023, 8:35 AMeygraber
09/14/2023, 2:48 PMVampire
09/14/2023, 2:52 PMeygraber
09/14/2023, 2:53 PMRob Elliot
09/14/2023, 3:27 PMVampire
09/14/2023, 4:47 PMmbonnin
09/14/2023, 10:26 PMNicholas Doglio
09/14/2023, 10:28 PMZoltan Demant
09/15/2023, 7:51 AMVampire
09/15/2023, 9:04 AMNicholas Doglio
09/24/2023, 11:34 PM@Serializable
data class VersionCatalog(
val versions: Map<String, String>,
val plugins: Map<String, Plugin>,
val libraries: Map<String, Library>,
)
@Serializable(with = LibrarySerializer::class)
@TomlInlineTable
sealed interface Library {
val module: String
}
@Serializable
@TomlInlineTable
data class InlineVersionLibrary(
override val module: String,
val version: String,
) : Library
@Serializable
@TomlInlineTable
data class RefVersionLibrary(
override val module: String,
val version: Version,
) : Library
@Serializable @TomlInlineTable data class Version(val ref: String)
@Serializable(with = PluginSerializer::class)
@TomlInlineTable
sealed interface Plugin {
val id: String
}
@Serializable
@TomlInlineTable
data class RefVersionPlugin(override val id: String, val version: Version) : Plugin
@Serializable
@TomlInlineTable
data class InlineVersionPlugin(override val id: String, val version: String) : Plugin
/**
* A custom [KSerializer] so we can support the proper format for both inline and referenced
* versions for libraries.
*/
private object LibrarySerializer : KSerializer<Library> {
// Use the ref version as a default
@OptIn(ExperimentalSerializationApi::class)
override val descriptor = SerialDescriptor("Library", serialDescriptor<RefVersionLibrary>())
override fun serialize(encoder: Encoder, value: Library) {
when (value) {
is InlineVersionLibrary -> InlineVersionLibrary.serializer().serialize(encoder, value)
is RefVersionLibrary -> RefVersionLibrary.serializer().serialize(encoder, value)
}
}
override fun deserialize(decoder: Decoder): Library {
throw UnsupportedOperationException()
}
}
/**
* A custom [KSerializer] so we can support the proper format for both inline and referenced
* versions for plugins.
*/
private object PluginSerializer : KSerializer<Plugin> {
// Use the ref version as a default
@OptIn(ExperimentalSerializationApi::class)
override val descriptor = SerialDescriptor("Plugin", serialDescriptor<RefVersionLibrary>())
override fun serialize(encoder: Encoder, value: Plugin) {
when (value) {
is InlineVersionPlugin -> InlineVersionPlugin.serializer().serialize(encoder, value)
is RefVersionPlugin -> RefVersionPlugin.serializer().serialize(encoder, value)
}
}
override fun deserialize(decoder: Decoder): Plugin {
throw UnsupportedOperationException()
}
}