From c27f795b87358736012f833a1435ff108f86a987 Mon Sep 17 00:00:00 2001
From: Andrew Golovashevich <landgrafhomyak@gmail.com>
Date: Fri, 20 Dec 2024 19:33:49 +0300
Subject: [PATCH] Module templates creating interface

---
 .../serdha/api/v0/ddl/ModuleTemplate.kt       | 21 ++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt
index 23587eb..2751fb3 100644
--- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt
@@ -1,18 +1,25 @@
 package ru.landgrafhomyak.serdha.api.v0.ddl
 
 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 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 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
 }
\ No newline at end of file