diff --git a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt index edbbdd9e..a9a1e6fd 100644 --- a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt +++ b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt @@ -18,6 +18,7 @@ package opensavvy.ktmongo.utils.kmongo 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 @@ class KMongoNameStrategy( 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 index 85906fc9..759114b3 100644 --- a/dsl/src/commonMain/kotlin/path/Field.kt +++ b/dsl/src/commonMain/kotlin/path/Field.kt @@ -141,7 +141,7 @@ interface FieldDsl { @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 @@ interface FieldDsl { * * @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 index cd07c40b..3307a11c 100644 --- a/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt +++ b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt @@ -34,7 +34,7 @@ interface PropertyNameStrategy { * 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 @@ interface PropertyNameStrategy { object Default : PropertyNameStrategy { @LowLevelApi - override fun nameOf(property: KProperty1<*, *>): String = - property.name + override fun pathOf(property: KProperty1<*, *>): Path = + Path(property.name) } }