Module templates creating interface

This commit is contained in:
Andrew Golovashevich 2024-12-20 19:33:49 +03:00
parent 4d54242286
commit c27f795b87

View File

@ -1,18 +1,25 @@
package ru.landgrafhomyak.serdha.api.v0.ddl package ru.landgrafhomyak.serdha.api.v0.ddl
public interface ModuleTemplate<ModuleUserExtension : Any> { public interface ModuleTemplate<ModuleUserExtension : Any> {
public interface Creator {
public fun <NewModuleUserExtension : Any> createTemplate(
versionKey: String,
updater: CreateModule<NewModuleUserExtension>,
): ModuleTemplate<NewModuleUserExtension>
public fun <OldModuleUserExtension : Any, NewModuleUserExtension : Any> upgradeTemplate(
versionKey: String,
updater: UpgradeModule<OldModuleUserExtension, NewModuleUserExtension>,
): ModuleTemplate<NewModuleUserExtension>
}
public interface CreateModule<ModuleUserExtension : Any> { public interface CreateModule<ModuleUserExtension : Any> {
public fun createModule(oldModule: ModuleTemplate<ModuleUserExtension>, rootNs: Namespace, updater: ModuleCreator): ModuleUserExtension public fun createModule(rootNs: Namespace, creator: ModuleCreator): ModuleUserExtension
} }
public interface UpgradeModule<OldModuleUserExtension : Any, NewModuleUserExtension : Any> { public interface UpgradeModule<OldModuleUserExtension : Any, NewModuleUserExtension : Any> {
public fun createModule(oldModule: ModuleTemplate<OldModuleUserExtension>, rootNs: Namespace, updater: ModuleCreator): NewModuleUserExtension public fun upgradeModule(oldModule: Module<OldModuleUserExtension>, rootNs: Namespace, updater: ModuleCreator): NewModuleUserExtension
} }
public fun <NewModuleUserExtension : Any> upgrade(
newVersionKey: String,
updater: UpgradeModule<ModuleUserExtension, NewModuleUserExtension>
): ModuleTemplate<NewModuleUserExtension>
public val versionKey: String public val versionKey: String
} }