From 3d0d2ec38eddd6758ab99f9378c14b29d14dcadb Mon Sep 17 00:00:00 2001
From: Andrew Golovashevich <landgrafhomyak@gmail.com>
Date: Fri, 16 May 2025 16:27:17 +0300
Subject: [PATCH] ApiVersion now enum

---
 .../db/skeleton1/api/ApiVersion.kt            | 23 ++++---------------
 .../db/skeleton1/api/DriverMetainfo.kt        |  3 ++-
 .../db/skeleton1/api/SinceApi.kt              |  4 ++++
 3 files changed, 11 insertions(+), 19 deletions(-)
 create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/SinceApi.kt

diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ApiVersion.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ApiVersion.kt
index f639509..dbfadf7 100644
--- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ApiVersion.kt
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/ApiVersion.kt
@@ -1,24 +1,11 @@
 package ru.landgrafhomyak.db.skeleton1.api
 
-import kotlin.jvm.JvmField
-
-public abstract class ApiVersion private constructor(public val str: String) {
-	override fun equals(other: Any?): Boolean {
-		if (other == null) return false
-		if (other !is ApiVersion) return false
-		return this === other
-	}
+public enum class ApiVersion(public val str: String) {
+	V_0_0("0.0") {
+		override fun isImplements(v: ApiVersion) = this === v
+	};
 
 	override fun toString(): String = "<db-skeleton api version '${this.str}'>"
 
-	override fun hashCode(): Int = this.str.hashCode()
-
-	public abstract fun isImplements(lower: ApiVersion): Boolean
-
-	public companion object {
-		@JvmField
-		public val V_0_0: ApiVersion = object : ApiVersion("0.0") {
-			override fun isImplements(lower: ApiVersion) = this === lower
-		}
-	}
+	public abstract fun isImplements(v: ApiVersion): Boolean
 }
\ No newline at end of file
diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverMetainfo.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverMetainfo.kt
index f596c46..939b64e 100644
--- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverMetainfo.kt
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/DriverMetainfo.kt
@@ -14,5 +14,6 @@ public interface DriverMetainfo<
 		@Suppress("unused") STATEMENT_CONSTRUCTOR__PARAMS_2_TABLE : RawStatement.Params2Table.Constructor<*>,
 		@Suppress("unused") OBJECT_OPERATIONS : ObjectOperations<*>
 		> {
-			public val apiVersion: ApiVersion
+	@ReflectionApi
+	public fun isImplements(version: ApiVersion): Boolean
 }
\ No newline at end of file
diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/SinceApi.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/SinceApi.kt
new file mode 100644
index 0000000..0b94b57
--- /dev/null
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/SinceApi.kt
@@ -0,0 +1,4 @@
+package ru.landgrafhomyak.db.skeleton1.api
+
+@Retention(AnnotationRetention.BINARY)
+public annotation class SinceApi(val version: ApiVersion)