diff --git a/bson/src/commonMain/kotlin/PropertyNameStrategy.kt b/bson/src/commonMain/kotlin/PropertyNameStrategy.kt deleted file mode 100644 --- a/bson/src/commonMain/kotlin/PropertyNameStrategy.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2025, OpenSavvy and contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package opensavvy.ktmongo.bson - -import opensavvy.ktmongo.dsl.LowLevelApi -import kotlin.reflect.KProperty1 - -/** - * Allows configuring how the DSL generates property paths from - */ -interface PropertyNameStrategy { - - /** - * Generates the name of a [property]. - * - * This is used by the DSL to allow configuring how the notation `Foo::bar / Bar::baz` is - * converted into a MongoDB path. - * - * For example, an implementation could add support for the KMongo annotation `@BsonId` to rename - * the field `_id`. - */ - @LowLevelApi - fun nameOf(property: KProperty1<*, *>): String - - /** - * Default implementation of [PropertyNameStrategy], which always uses the property name. - */ - object Default : PropertyNameStrategy { - - @LowLevelApi - override fun nameOf(property: KProperty1<*, *>): String = - property.name - } -} diff --git a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt --- a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -21,7 +21,6 @@ import com.mongodb.client.model.UpdateOptions import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.firstOrNull -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.official.JvmBsonFactory import opensavvy.ktmongo.bson.official.types.Jvm import opensavvy.ktmongo.bson.types.ObjectIdGenerator @@ -35,6 +34,7 @@ import opensavvy.ktmongo.dsl.options.WithWriteConcern import opensavvy.ktmongo.dsl.options.WriteConcernOption import opensavvy.ktmongo.dsl.options.option +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import opensavvy.ktmongo.dsl.query.FilterQuery import opensavvy.ktmongo.dsl.query.UpdateQuery import opensavvy.ktmongo.dsl.query.UpdateWithPipelineQuery 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 @@ -17,8 +17,8 @@ package opensavvy.ktmongo.utils.kmongo import kotlinx.serialization.SerialName -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.LowLevelApi +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import org.bson.codecs.pojo.annotations.BsonId import org.litote.kmongo.property.KPropertyPath import kotlin.reflect.KProperty1 diff --git a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt --- a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt +++ b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt @@ -18,9 +18,9 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.path.FieldDsl +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import opensavvy.prepared.runner.testballoon.preparedSuite import opensavvy.prepared.suite.prepared import org.bson.codecs.pojo.annotations.BsonId diff --git a/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt --- a/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt +++ b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt @@ -16,10 +16,10 @@ package opensavvy.ktmongo.official -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.official.JvmBsonFactory import opensavvy.ktmongo.bson.types.ObjectIdGenerator import opensavvy.ktmongo.dsl.BsonContext +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy class JvmBsonContext( bsonFactory: JvmBsonFactory, diff --git a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt --- a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -19,7 +19,6 @@ import com.mongodb.client.model.* import com.mongodb.client.model.ReplaceOptions import com.mongodb.client.model.UpdateOptions -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.official.JvmBsonFactory import opensavvy.ktmongo.bson.official.types.Jvm import opensavvy.ktmongo.bson.types.ObjectIdGenerator @@ -33,6 +32,7 @@ import opensavvy.ktmongo.dsl.options.WithWriteConcern import opensavvy.ktmongo.dsl.options.WriteConcernOption import opensavvy.ktmongo.dsl.options.option +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import opensavvy.ktmongo.dsl.query.FilterQuery import opensavvy.ktmongo.dsl.query.UpdateQuery import opensavvy.ktmongo.dsl.query.UpdateWithPipelineQuery diff --git a/dsl/src/commonMain/kotlin/BsonContext.kt b/dsl/src/commonMain/kotlin/BsonContext.kt --- a/dsl/src/commonMain/kotlin/BsonContext.kt +++ b/dsl/src/commonMain/kotlin/BsonContext.kt @@ -17,8 +17,8 @@ package opensavvy.ktmongo.dsl import opensavvy.ktmongo.bson.BsonFactory -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.types.ObjectIdGenerator +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.time.ExperimentalTime 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 @@ -16,7 +16,6 @@ package opensavvy.ktmongo.dsl.path -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl diff --git a/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt new file mode 100644 --- /dev/null +++ b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2025, OpenSavvy and contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package opensavvy.ktmongo.dsl.path + +import opensavvy.ktmongo.dsl.LowLevelApi +import kotlin.reflect.KProperty1 + +/** + * Allows configuring how the DSL generates property paths from + */ +interface PropertyNameStrategy { + + /** + * Generates the name of a [property]. + * + * This is used by the DSL to allow configuring how the notation `Foo::bar / Bar::baz` is + * converted into a MongoDB path. + * + * For example, an implementation could add support for the KMongo annotation `@BsonId` to rename + * the field `_id`. + */ + @LowLevelApi + fun nameOf(property: KProperty1<*, *>): String + + /** + * Default implementation of [PropertyNameStrategy], which always uses the property name. + */ + object Default : PropertyNameStrategy { + + @LowLevelApi + override fun nameOf(property: KProperty1<*, *>): String = + property.name + } +} diff --git a/dsl/src/commonTest/kotlin/path/FieldTest.kt b/dsl/src/commonTest/kotlin/path/FieldTest.kt --- a/dsl/src/commonTest/kotlin/path/FieldTest.kt +++ b/dsl/src/commonTest/kotlin/path/FieldTest.kt @@ -16,7 +16,6 @@ package opensavvy.ktmongo.dsl.path -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.prepared.runner.testballoon.preparedSuite import kotlin.reflect.KProperty1