From ae6597ec87e17fbbc163f03973ac9f1fe2e75230 Mon Sep 17 00:00:00 2001 From: Ivan “CLOVIS” Canet Date: Sun, 23 Nov 2025 15:08:47 +0000 Subject: [PATCH] refactor(bson): PropertyNameStrategy should generate Paths This will make #96 possible. --- driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt | 9 +++++---- dsl/src/commonMain/kotlin/path/Field.kt | 6 +++--- dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt | 6 +++--- 3 file(s) changed, 11 insertion(s)(+), 10 deletion(s)(-) diff --git a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt --- a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt +++ b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt @@ -18,6 +18,7 @@ import kotlinx.serialization.SerialName import opensavvy.ktmongo.dsl.LowLevelApi +import opensavvy.ktmongo.dsl.path.Path import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import org.bson.codecs.pojo.annotations.BsonId import org.litote.kmongo.property.KPropertyPath @@ -29,18 +30,18 @@ private val default: PropertyNameStrategy = PropertyNameStrategy.Default, ) : PropertyNameStrategy { @LowLevelApi - override fun nameOf(property: KProperty1<*, *>): String { + override fun pathOf(property: KProperty1<*, *>): Path { require(property !is KPropertyPath) { "Attempted to generate a KtMongo Field from a KMongo KPropertyPath instance, which is not supported yet. Please avoid mixing KtMongo and KMongo property syntax (/).\nProperty: $property" } val bsonId = property.javaField?.annotations?.filterIsInstance()?.firstOrNull() val serialName = property.findAnnotation() if (serialName != null) - return serialName.value + return Path(serialName.value) if (bsonId != null) - return "_id" + return Path("_id") - return default.nameOf(property) + return default.pathOf(property) } } diff --git a/dsl/src/commonMain/kotlin/path/Field.kt b/dsl/src/commonMain/kotlin/path/Field.kt --- a/dsl/src/commonMain/kotlin/path/Field.kt +++ b/dsl/src/commonMain/kotlin/path/Field.kt @@ -141,7 +141,7 @@ @KtMongoDsl @OptIn(LowLevelApi::class) val KProperty1.field: Field - get() = FieldImpl(Path(context.nameOf(this))) + get() = FieldImpl(context.pathOf(this)) /** * Refers to [child] as a nested field of the current field. @@ -202,10 +202,10 @@ * * @see get Access a specific element of an array */ - @OptIn(LowLevelApi::class) + @OptIn(LowLevelApi::class, DangerousMongoApi::class) @KtMongoDsl operator fun Field.div(child: KProperty1): Field = - FieldImpl(path / PathSegment.Field(context.nameOf(child))) + FieldImpl(path / context.pathOf(child)) /** * Refers to a field [child] of the current field, with no compile-time safety. diff --git a/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt --- a/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt +++ b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt @@ -34,7 +34,7 @@ * the field `_id`. */ @LowLevelApi - fun nameOf(property: KProperty1<*, *>): String + fun pathOf(property: KProperty1<*, *>): Path /** * Default implementation of [PropertyNameStrategy], which always uses the property name. @@ -42,7 +42,7 @@ object Default : PropertyNameStrategy { @LowLevelApi - override fun nameOf(property: KProperty1<*, *>): String = - property.name + override fun pathOf(property: KProperty1<*, *>): Path = + Path(property.name) } } -- tangled.sh