From 4f1872e0996a993da582b276e8f5b295c29b3813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sun, 23 Nov 2025 15:03:11 +0100 Subject: [PATCH 1/4] refactor(bson): Create BsonFactory --- bson/src/commonMain/kotlin/BsonContext.kt | 132 +----------------- bson/src/commonMain/kotlin/BsonFactory.kt | 158 ++++++++++++++++++++++ 2 files changed, 159 insertions(+), 131 deletions(-) create mode 100644 bson/src/commonMain/kotlin/BsonFactory.kt diff --git a/bson/src/commonMain/kotlin/BsonContext.kt b/bson/src/commonMain/kotlin/BsonContext.kt index a7fe697..bb3f25c 100644 --- a/bson/src/commonMain/kotlin/BsonContext.kt +++ b/bson/src/commonMain/kotlin/BsonContext.kt @@ -17,10 +17,6 @@ package opensavvy.ktmongo.bson import opensavvy.ktmongo.bson.types.ObjectIdGenerator -import opensavvy.ktmongo.dsl.LowLevelApi -import kotlin.reflect.KClass -import kotlin.reflect.KType -import kotlin.reflect.typeOf /** * Configuration for the BSON serialization. @@ -30,136 +26,10 @@ import kotlin.reflect.typeOf * * For example, a platform may store its serialization configuration in this class. */ -interface BsonContext : ObjectIdGenerator { - - /** - * Instantiates a new [BSON document][Bson]. - * - * ### Example - * - * To create the following BSON document: - * ```json - * { - * "name": "Bob", - * "isAlive": true, - * "children": [ - * { - * "name": "Alice" - * }, - * { - * "name": "Charles" - * } - * ] - * } - * ``` - * use the code: - * ```kotlin - * buildDocument { - * writeString("name", "Alice") - * writeBoolean("isAlive", true) - * writeArray("children") { - * writeDocument { - * writeString("name", "Alice") - * } - * writeDocument { - * writeString("name", "Charles") - * } - * } - * } - * ``` - */ - @LowLevelApi - @BsonWriterDsl - fun buildDocument(block: BsonFieldWriter.() -> Unit): Bson - - /** - * Instantiates a new [BSON document][Bson] representing the provided [instance]. - */ - @LowLevelApi - @BsonWriterDsl - fun buildDocument(instance: BsonFieldWriteable): Bson = - buildDocument { instance.writeTo(this) } - - /** - * Writes an arbitrary Kotlin [obj] into a top-level BSON document. - * - * Prefer using [BsonContext.write]. - * - * A top-level BSON document cannot be `null`, cannot be a primitive, and cannot be a collection. - * If [obj] is not representable as a document, an exception is thrown. - */ - @LowLevelApi - @BsonWriterDsl - fun buildDocument(obj: T, type: KType, klass: KClass): Bson - - /** - * Instantiates a new [BSON document][Bson] by reading its [bytes] representation. - * - * The reverse operation is available as [Bson.toByteArray]. - */ - @LowLevelApi - fun readDocument(bytes: ByteArray): Bson - - /** - * Instantiates a new [BSON array][BsonArray]. - * - * ### Example - * - * To create the following BSON array: - * ```json - * [ - * 12, - * null, - * { - * "name": "Barry" - * } - * ] - * ``` - * use the code: - * ```kotlin - * buildArray { - * writeInt32(12) - * writeNull() - * writeDocument { - * writeString("name", "Barry") - * } - * } - * ``` - */ - @LowLevelApi - @BsonWriterDsl - fun buildArray(block: BsonValueWriter.() -> Unit): BsonArray - - /** - * Instantiates a new [BSON array][BsonArray] representing the provided [instance]. - */ - @LowLevelApi - @BsonWriterDsl - fun buildArray(instance: BsonValueWriteable): BsonArray = - buildArray { instance.writeTo(this) } - - /** - * Instantiates a new [BSON array][BsonArray] by reading its [bytes] representation. - * - * The reverse operation is available as [BsonArray.toByteArray]. - */ - @LowLevelApi - fun readArray(bytes: ByteArray): BsonArray +interface BsonContext : ObjectIdGenerator, BsonFactory { /** * The naming strategy used to generate paths. */ val nameStrategy: PropertyNameStrategy } - -/** - * Writes an arbitrary Kotlin [obj] into a top-level BSON document. - * - * A top-level BSON document cannot be `null`, cannot be a primitive, and cannot be a collection. - * If [obj] is not representable as a document, an exception is thrown. - * - * @see Bson.read The inverse operation. - */ -@OptIn(LowLevelApi::class) -inline fun BsonContext.write(obj: T): Bson = - buildDocument(obj, typeOf(), T::class) diff --git a/bson/src/commonMain/kotlin/BsonFactory.kt b/bson/src/commonMain/kotlin/BsonFactory.kt new file mode 100644 index 0000000..1c891d5 --- /dev/null +++ b/bson/src/commonMain/kotlin/BsonFactory.kt @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2024-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.KClass +import kotlin.reflect.KType +import kotlin.reflect.typeOf + +/** + * Entrypoint for creating [Bson] and [BsonArray] instances. + * + * Instances of this interface are platform-specific and are used to create BSON documents. + * Each instance may allow parameterization of some behaviors. + */ +interface BsonFactory { + + /** + * Instantiates a new [BSON document][Bson]. + * + * ### Example + * + * To create the following BSON document: + * ```json + * { + * "name": "Bob", + * "isAlive": true, + * "children": [ + * { + * "name": "Alice" + * }, + * { + * "name": "Charles" + * } + * ] + * } + * ``` + * use the code: + * ```kotlin + * buildDocument { + * writeString("name", "Alice") + * writeBoolean("isAlive", true) + * writeArray("children") { + * writeDocument { + * writeString("name", "Alice") + * } + * writeDocument { + * writeString("name", "Charles") + * } + * } + * } + * ``` + */ + @LowLevelApi + @BsonWriterDsl + fun buildDocument(block: BsonFieldWriter.() -> Unit): Bson + + /** + * Instantiates a new [BSON document][Bson] representing the provided [instance]. + */ + @LowLevelApi + @BsonWriterDsl + fun buildDocument(instance: BsonFieldWriteable): Bson = + buildDocument { instance.writeTo(this) } + + /** + * Writes an arbitrary Kotlin [obj] into a top-level BSON document. + * + * Prefer using [BsonContext.write]. + * + * A top-level BSON document cannot be `null`, cannot be a primitive, and cannot be a collection. + * If [obj] is not representable as a document, an exception is thrown. + */ + @LowLevelApi + @BsonWriterDsl + fun buildDocument(obj: T, type: KType, klass: KClass): Bson + + /** + * Instantiates a new [BSON document][Bson] by reading its [bytes] representation. + * + * The reverse operation is available as [Bson.toByteArray]. + */ + @LowLevelApi + fun readDocument(bytes: ByteArray): Bson + + /** + * Instantiates a new [BSON array][BsonArray]. + * + * ### Example + * + * To create the following BSON array: + * ```json + * [ + * 12, + * null, + * { + * "name": "Barry" + * } + * ] + * ``` + * use the code: + * ```kotlin + * buildArray { + * writeInt32(12) + * writeNull() + * writeDocument { + * writeString("name", "Barry") + * } + * } + * ``` + */ + @LowLevelApi + @BsonWriterDsl + fun buildArray(block: BsonValueWriter.() -> Unit): BsonArray + + /** + * Instantiates a new [BSON array][BsonArray] representing the provided [instance]. + */ + @LowLevelApi + @BsonWriterDsl + fun buildArray(instance: BsonValueWriteable): BsonArray = + buildArray { instance.writeTo(this) } + + /** + * Instantiates a new [BSON array][BsonArray] by reading its [bytes] representation. + * + * The reverse operation is available as [BsonArray.toByteArray]. + */ + @LowLevelApi + fun readArray(bytes: ByteArray): BsonArray + +} + +/** + * Writes an arbitrary Kotlin [obj] into a top-level BSON document. + * + * A top-level BSON document cannot be `null`, cannot be a primitive, and cannot be a collection. + * If [obj] is not representable as a document, an exception is thrown. + * + * @see Bson.read The inverse operation. + */ +@OptIn(LowLevelApi::class) +inline fun BsonFactory.write(obj: T): Bson = + buildDocument(obj, typeOf(), T::class) -- GitLab From bb0b9dc36b84ecbf68be4dec17b4001fad8609ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sun, 23 Nov 2025 16:01:05 +0100 Subject: [PATCH 2/4] refactor(bson): Move BsonContext to :dsl --- .../kotlin/{BsonContext.kt => BsonFactory.kt} | 10 +- .../serialization/MultiplatformDecoder.kt | 8 +- .../serialization/MultiplatformEncoder.kt | 8 +- .../kotlin/MultiplatformBsonTests.kt | 2 +- .../kotlin/{BsonContext.kt => BsonFactory.kt} | 4 +- bson-official/src/jvmMain/kotlin/Bson.jvm.kt | 10 +- .../src/jvmMain/kotlin/BsonContext.jvm.kt | 44 +++++-- .../src/jvmMain/kotlin/BsonReader.jvm.kt | 6 +- .../src/jvmTest/kotlin/BsonContextTest.jvm.kt | 2 +- .../src/commonMain/kotlin/BsonWriterTest.kt | 2 +- .../src/commonMain/kotlin/raw/ArrayTest.kt | 4 +- .../src/commonMain/kotlin/raw/BinaryTest.kt | 4 +- .../src/commonMain/kotlin/raw/BooleanTest.kt | 4 +- .../src/commonMain/kotlin/raw/CodeTest.kt | 4 +- .../src/commonMain/kotlin/raw/DatetimeTest.kt | 4 +- .../src/commonMain/kotlin/raw/DocumentTest.kt | 4 +- .../src/commonMain/kotlin/raw/DoubleTest.kt | 4 +- .../src/commonMain/kotlin/raw/Helpers.kt | 8 +- .../src/commonMain/kotlin/raw/Int32Test.kt | 4 +- .../src/commonMain/kotlin/raw/Int64Test.kt | 4 +- .../commonMain/kotlin/raw/MinMaxKeyTest.kt | 4 +- .../src/commonMain/kotlin/raw/NullTest.kt | 4 +- .../src/commonMain/kotlin/raw/ObjectIdTest.kt | 4 +- .../src/commonMain/kotlin/raw/RegexTest.kt | 4 +- .../src/commonMain/kotlin/raw/StringTest.kt | 4 +- .../commonMain/kotlin/raw/TimestampTest.kt | 4 +- .../commonMain/kotlin/raw/UndefinedTest.kt | 4 +- .../commonMain/kotlin/FilteredCollection.kt | 2 +- .../kotlin/MongoAggregationPipeline.kt | 2 +- .../kotlin/operations/BaseOperations.kt | 4 +- .../src/jvmMain/kotlin/JvmMongoCollection.kt | 12 +- driver-shared-kmongo/build.gradle.kts | 1 + .../jvmTest/kotlin/KMongoNameStrategyTest.kt | 17 +-- .../src/jvmMain/kotlin/JvmBsonContext.kt | 30 ++--- .../commonMain/kotlin/FilteredCollection.kt | 2 +- .../kotlin/MongoAggregationPipeline.kt | 2 +- .../kotlin/operations/BaseOperations.kt | 4 +- .../src/jvmMain/kotlin/JvmMongoCollection.kt | 12 +- dsl/src/commonMain/kotlin/BsonContext.kt | 50 ++++++++ .../aggregation/AccumulationOperators.kt | 2 +- .../commonMain/kotlin/aggregation/Pipeline.kt | 2 +- .../commonMain/kotlin/aggregation/Value.kt | 2 +- .../ArithmeticValueAccumulators.kt | 2 +- .../operators/ArithmeticValueOperators.kt | 2 +- .../operators/ArrayValueOperators.kt | 2 +- .../operators/ComparisonValueOperators.kt | 2 +- .../operators/ConditionalValueOperators.kt | 2 +- .../operators/StringValueOperators.kt | 2 +- .../operators/TrigonometryValueOperators.kt | 2 +- .../operators/TypeValueOperators.kt | 2 +- .../aggregation/operators/ValueOperators.kt | 2 +- .../kotlin/aggregation/stages/Count.kt | 2 +- .../kotlin/aggregation/stages/Group.kt | 2 +- .../kotlin/aggregation/stages/Limit.kt | 2 +- .../kotlin/aggregation/stages/Match.kt | 2 +- .../kotlin/aggregation/stages/Project.kt | 2 +- .../kotlin/aggregation/stages/Sample.kt | 2 +- .../kotlin/aggregation/stages/Set.kt | 2 +- .../kotlin/aggregation/stages/Skip.kt | 2 +- .../kotlin/aggregation/stages/Sort.kt | 2 +- .../kotlin/aggregation/stages/UnionWith.kt | 2 +- .../kotlin/aggregation/stages/Unset.kt | 2 +- .../commonMain/kotlin/command/BulkWrite.kt | 2 +- dsl/src/commonMain/kotlin/command/Count.kt | 2 +- dsl/src/commonMain/kotlin/command/Delete.kt | 2 +- dsl/src/commonMain/kotlin/command/Drop.kt | 2 +- dsl/src/commonMain/kotlin/command/Find.kt | 2 +- dsl/src/commonMain/kotlin/command/Insert.kt | 2 +- dsl/src/commonMain/kotlin/command/Replace.kt | 2 +- dsl/src/commonMain/kotlin/command/Update.kt | 2 +- .../kotlin/command/UpdateWithPipeline.kt | 2 +- .../commonMain/kotlin/options/LimitOption.kt | 2 +- dsl/src/commonMain/kotlin/options/MaxTime.kt | 2 +- dsl/src/commonMain/kotlin/options/Options.kt | 2 +- .../kotlin/options/ReadConcernOption.kt | 2 +- .../kotlin/options/ReadPreferenceOption.kt | 2 +- .../commonMain/kotlin/options/SkipOption.kt | 2 +- .../commonMain/kotlin/options/SortOption.kt | 2 +- .../kotlin/options/WriteConcernOption.kt | 2 +- dsl/src/commonMain/kotlin/path/Field.kt | 11 +- .../kotlin/query/FilterQueryImpl.kt | 2 +- .../kotlin/query/FilterQueryPredicateImpl.kt | 2 +- .../kotlin/query/UpdateQueryImpl.kt | 2 +- .../kotlin/query/UpdateWithPipelineQuery.kt | 2 +- dsl/src/commonMain/kotlin/tree/BsonNode.kt | 2 +- .../kotlin/tree/CompoundBsonNode.kt | 2 +- .../kotlin/aggregation/ValueTest.kt | 2 +- dsl/src/commonTest/kotlin/path/FieldTest.kt | 29 +---- .../kotlin/query/ExpressionTestUtils.kt | 2 +- .../kotlin/query/ExpressionTestUtils.jvm.kt | 119 +++++++++--------- 90 files changed, 304 insertions(+), 257 deletions(-) rename bson-multiplatform/src/commonMain/kotlin/{BsonContext.kt => BsonFactory.kt} (90%) rename bson-official/src/commonMain/kotlin/{BsonContext.kt => BsonFactory.kt} (93%) rename bson/src/commonMain/kotlin/BsonContext.kt => driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt (53%) create mode 100644 dsl/src/commonMain/kotlin/BsonContext.kt diff --git a/bson-multiplatform/src/commonMain/kotlin/BsonContext.kt b/bson-multiplatform/src/commonMain/kotlin/BsonFactory.kt similarity index 90% rename from bson-multiplatform/src/commonMain/kotlin/BsonContext.kt rename to bson-multiplatform/src/commonMain/kotlin/BsonFactory.kt index 0417a58..6a832fb 100644 --- a/bson-multiplatform/src/commonMain/kotlin/BsonContext.kt +++ b/bson-multiplatform/src/commonMain/kotlin/BsonFactory.kt @@ -20,28 +20,22 @@ import kotlinx.io.Buffer import kotlinx.io.readTo import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.serializer -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonValueWriter -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.multiplatform.impl.write.CompletableBsonFieldWriter import opensavvy.ktmongo.bson.multiplatform.impl.write.CompletableBsonValueWriter import opensavvy.ktmongo.bson.multiplatform.impl.write.MultiplatformArrayFieldWriter import opensavvy.ktmongo.bson.multiplatform.impl.write.MultiplatformDocumentFieldWriter import opensavvy.ktmongo.bson.multiplatform.serialization.encodeToBson -import opensavvy.ktmongo.bson.types.ObjectIdGenerator import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi -import kotlin.concurrent.atomics.ExperimentalAtomicApi import kotlin.reflect.KClass import kotlin.reflect.KType import kotlin.time.ExperimentalTime @OptIn(ExperimentalTime::class) -class BsonContext @OptIn(ExperimentalAtomicApi::class) constructor( - objectIdGenerator: ObjectIdGenerator = ObjectIdGenerator.Default(), - override val nameStrategy: PropertyNameStrategy = PropertyNameStrategy.Default, -) : BsonContext, ObjectIdGenerator by objectIdGenerator { +class BsonFactory : BsonFactory { @Suppress("NOTHING_TO_INLINE") private inline fun openArbitraryTopLevel( diff --git a/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformDecoder.kt b/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformDecoder.kt index 8c1c8a3..8396783 100644 --- a/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformDecoder.kt +++ b/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformDecoder.kt @@ -32,7 +32,7 @@ import opensavvy.ktmongo.bson.BsonArrayReader import opensavvy.ktmongo.bson.BsonDocumentReader import opensavvy.ktmongo.bson.BsonType import opensavvy.ktmongo.bson.BsonValueReader -import opensavvy.ktmongo.bson.multiplatform.BsonContext +import opensavvy.ktmongo.bson.multiplatform.BsonFactory import opensavvy.ktmongo.bson.types.ObjectId import opensavvy.ktmongo.bson.types.Timestamp import opensavvy.ktmongo.dsl.LowLevelApi @@ -44,7 +44,7 @@ import kotlin.uuid.Uuid @ExperimentalSerializationApi internal class BsonDecoderTopLevel( override val serializersModule: SerializersModule, - val context: BsonContext, + val context: BsonFactory, val bytes: ByteArray, ) : AbstractDecoder() { var out: Any? = null @@ -300,11 +300,11 @@ internal class BsonCompositeListDecoder( } @ExperimentalSerializationApi -fun decodeFromBson(context: BsonContext, bytes: ByteArray, deserializer: DeserializationStrategy): T { +fun decodeFromBson(context: BsonFactory, bytes: ByteArray, deserializer: DeserializationStrategy): T { val decoder = BsonDecoderTopLevel(EmptySerializersModule(), context, bytes) return decoder.decodeSerializableValue(deserializer) } @ExperimentalSerializationApi -inline fun decodeFromBson(context: BsonContext, bytes: ByteArray): T = +inline fun decodeFromBson(context: BsonFactory, bytes: ByteArray): T = decodeFromBson(context, bytes, serializer()) diff --git a/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformEncoder.kt b/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformEncoder.kt index cb938a7..c07c922 100644 --- a/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformEncoder.kt +++ b/bson-multiplatform/src/commonMain/kotlin/serialization/MultiplatformEncoder.kt @@ -29,7 +29,7 @@ import kotlinx.serialization.modules.EmptySerializersModule import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.serializer import opensavvy.ktmongo.bson.multiplatform.Bson -import opensavvy.ktmongo.bson.multiplatform.BsonContext +import opensavvy.ktmongo.bson.multiplatform.BsonFactory import opensavvy.ktmongo.bson.multiplatform.impl.write.CompletableBsonFieldWriter import opensavvy.ktmongo.bson.multiplatform.impl.write.CompletableBsonValueWriter import opensavvy.ktmongo.bson.types.ObjectId @@ -43,7 +43,7 @@ import kotlin.uuid.Uuid @ExperimentalSerializationApi @LowLevelApi -private class BsonEncoderTopLevel(override val serializersModule: SerializersModule, val context: BsonContext) : AbstractEncoder() { +private class BsonEncoderTopLevel(override val serializersModule: SerializersModule, val context: BsonFactory) : AbstractEncoder() { lateinit var out: Bson override fun encodeNull() { @@ -274,7 +274,7 @@ private class BsonCompositeEncoderList(override val serializersModule: Serialize */ @ExperimentalSerializationApi @OptIn(LowLevelApi::class, DangerousMongoApi::class) -fun encodeToBson(context: BsonContext, value: T, serializer: SerializationStrategy): Bson { +fun encodeToBson(context: BsonFactory, value: T, serializer: SerializationStrategy): Bson { val encoder = BsonEncoderTopLevel(EmptySerializersModule(), context) encoder.encodeSerializableValue(serializer, value) return encoder.out @@ -286,5 +286,5 @@ fun encodeToBson(context: BsonContext, value: T, serializer: Serializa * [value] must be serializable using KotlinX.Serialization. For example, using the `@Serializable` annotation. */ @ExperimentalSerializationApi -inline fun encodeToBson(context: BsonContext, value: T): Bson = +inline fun encodeToBson(context: BsonFactory, value: T): Bson = encodeToBson(context, value, serializer()) diff --git a/bson-multiplatform/src/commonTest/kotlin/MultiplatformBsonTests.kt b/bson-multiplatform/src/commonTest/kotlin/MultiplatformBsonTests.kt index e06e9a2..09dac93 100644 --- a/bson-multiplatform/src/commonTest/kotlin/MultiplatformBsonTests.kt +++ b/bson-multiplatform/src/commonTest/kotlin/MultiplatformBsonTests.kt @@ -23,7 +23,7 @@ import opensavvy.prepared.runner.testballoon.preparedSuite import opensavvy.prepared.suite.prepared val context by prepared { - BsonContext() + BsonFactory() } val MultiplatformBsonWriterTest by preparedSuite { diff --git a/bson-official/src/commonMain/kotlin/BsonContext.kt b/bson-official/src/commonMain/kotlin/BsonFactory.kt similarity index 93% rename from bson-official/src/commonMain/kotlin/BsonContext.kt rename to bson-official/src/commonMain/kotlin/BsonFactory.kt index 22465dc..38312d4 100644 --- a/bson-official/src/commonMain/kotlin/BsonContext.kt +++ b/bson-official/src/commonMain/kotlin/BsonFactory.kt @@ -17,13 +17,13 @@ package opensavvy.ktmongo.bson.official import opensavvy.ktmongo.bson.* -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.dsl.LowLevelApi /** * BSON implementation based on the official MongoDB drivers. */ -interface BsonContext : BsonContext { +interface BsonFactory : BsonFactory { @LowLevelApi override fun buildDocument(block: BsonFieldWriter.() -> Unit): Bson diff --git a/bson-official/src/jvmMain/kotlin/Bson.jvm.kt b/bson-official/src/jvmMain/kotlin/Bson.jvm.kt index 573af22..0b817c0 100644 --- a/bson-official/src/jvmMain/kotlin/Bson.jvm.kt +++ b/bson-official/src/jvmMain/kotlin/Bson.jvm.kt @@ -32,7 +32,7 @@ import org.bson.BsonDocument as OfficialBsonDocument actual class Bson internal constructor( val raw: OfficialBsonDocument, - val context: JvmBsonContext, + val context: JvmBsonFactory, ) : Bson { @LowLevelApi @@ -50,7 +50,7 @@ actual class Bson internal constructor( actual class BsonArray internal constructor( val raw: OfficialBsonArray, - val context: JvmBsonContext, + val context: JvmBsonFactory, ) : BsonArray { @LowLevelApi @@ -71,7 +71,7 @@ actual class BsonArray internal constructor( // Inspired by https://gist.github.com/Koboo/ebd7c6802101e1a941ef31baca04113d // Inspired by https://stackoverflow.com/questions/49262903 @LowLevelApi -private fun OfficialBsonDocument.toByteArray(context: JvmBsonContext): ByteArray { +private fun OfficialBsonDocument.toByteArray(context: JvmBsonFactory): ByteArray { val buffer = BasicOutputBuffer() val writer = BsonBinaryWriter(buffer) val documentCodec = DocumentCodec(context.codecRegistry) @@ -90,7 +90,7 @@ private fun OfficialBsonDocument.toByteArray(context: JvmBsonContext): ByteArray } internal class KotlinBsonCodec( - private val context: JvmBsonContext, + private val context: JvmBsonFactory, ) : Codec { private val documentCodec = BsonDocumentCodec() @@ -106,7 +106,7 @@ internal class KotlinBsonCodec( } internal class KotlinBsonArrayCodec( - private val context: JvmBsonContext, + private val context: JvmBsonFactory, ) : Codec { private val arrayCodec = BsonArrayCodec() diff --git a/bson-official/src/jvmMain/kotlin/BsonContext.jvm.kt b/bson-official/src/jvmMain/kotlin/BsonContext.jvm.kt index e1368e0..2339371 100644 --- a/bson-official/src/jvmMain/kotlin/BsonContext.jvm.kt +++ b/bson-official/src/jvmMain/kotlin/BsonContext.jvm.kt @@ -19,9 +19,7 @@ package opensavvy.ktmongo.bson.official import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonValueWriter import opensavvy.ktmongo.bson.DEPRECATED_IN_BSON_SPEC -import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.bson.official.types.* -import opensavvy.ktmongo.bson.types.ObjectIdGenerator import opensavvy.ktmongo.bson.types.Timestamp import opensavvy.ktmongo.dsl.LowLevelApi import org.bson.* @@ -41,14 +39,37 @@ import kotlin.time.ExperimentalTime /** * BSON implementation based on the official Java and Kotlin MongoDB drivers. */ -class JvmBsonContext( +interface JvmBsonFactory : BsonFactory { + + @LowLevelApi + val codecRegistry: CodecRegistry + + @LowLevelApi + override fun buildDocument(block: BsonFieldWriter.() -> Unit): Bson + + @LowLevelApi + override fun buildDocument(obj: T, type: KType, klass: KClass): Bson + + @LowLevelApi + override fun readDocument(bytes: ByteArray): Bson + + @LowLevelApi + override fun buildArray(block: BsonValueWriter.() -> Unit): opensavvy.ktmongo.bson.official.BsonArray + + @LowLevelApi + override fun readArray(bytes: ByteArray): opensavvy.ktmongo.bson.official.BsonArray + +} + +/** + * BSON implementation based on the official Java and Kotlin MongoDB drivers. + */ +private class JvmBsonFactoryImpl( codecRegistry: CodecRegistry, - objectIdGenerator: ObjectIdGenerator = ObjectIdGenerator.Jvm(), - override val nameStrategy: PropertyNameStrategy = PropertyNameStrategy.Default, -) : BsonContext, ObjectIdGenerator by objectIdGenerator { +) : JvmBsonFactory { @LowLevelApi - val codecRegistry: CodecRegistry = CodecRegistries.fromRegistries( + override val codecRegistry: CodecRegistry = CodecRegistries.fromRegistries( codecRegistry, CodecRegistries.fromCodecs( KotlinBsonCodec(this), @@ -118,10 +139,13 @@ class JvmBsonContext( } } +fun JvmBsonFactory(codecRegistry: CodecRegistry): JvmBsonFactory = + JvmBsonFactoryImpl(codecRegistry) + @OptIn(LowLevelApi::class) private class JavaBsonWriter( - private val context: JvmBsonContext, - private val writer: BsonWriter + private val context: JvmBsonFactory, + private val writer: BsonWriter, ) : BsonFieldWriter, BsonValueWriter { override fun write(name: String, block: BsonValueWriter.() -> Unit) { writer.writeName(name) @@ -341,7 +365,7 @@ private class JavaBsonWriter( @LowLevelApi private class JavaRootArrayWriter( - private val context: JvmBsonContext, + private val context: JvmBsonFactory, private val array: BsonArray, ) : BsonValueWriter { @LowLevelApi diff --git a/bson-official/src/jvmMain/kotlin/BsonReader.jvm.kt b/bson-official/src/jvmMain/kotlin/BsonReader.jvm.kt index 4f9b63f..7433751 100644 --- a/bson-official/src/jvmMain/kotlin/BsonReader.jvm.kt +++ b/bson-official/src/jvmMain/kotlin/BsonReader.jvm.kt @@ -37,7 +37,7 @@ import org.bson.BsonDocument as OfficialBsonDocument @LowLevelApi internal class BsonDocumentReader( private val raw: OfficialBsonDocument, - private val context: JvmBsonContext, + private val context: JvmBsonFactory, ) : BsonDocumentReader { override fun read(name: String): BsonValueReader? { return BsonValueReader(raw[name] ?: return null, context) @@ -67,7 +67,7 @@ internal class BsonDocumentReader( @LowLevelApi internal class BsonArrayReader( private val raw: OfficialBsonArray, - private val context: JvmBsonContext, + private val context: JvmBsonFactory, ) : BsonArrayReader { override fun read(index: Int): BsonValueReader? { return BsonValueReader(raw.getOrNull(index) ?: return null, context) @@ -99,7 +99,7 @@ internal class BsonArrayReader( @LowLevelApi private class BsonValueReader( private val value: BsonValue, - private val context: JvmBsonContext, + private val context: JvmBsonFactory, ) : BsonValueReader { override val type: BsonType diff --git a/bson-official/src/jvmTest/kotlin/BsonContextTest.jvm.kt b/bson-official/src/jvmTest/kotlin/BsonContextTest.jvm.kt index ab6e87a..68b805e 100644 --- a/bson-official/src/jvmTest/kotlin/BsonContextTest.jvm.kt +++ b/bson-official/src/jvmTest/kotlin/BsonContextTest.jvm.kt @@ -22,7 +22,7 @@ import opensavvy.prepared.runner.testballoon.preparedSuite import opensavvy.prepared.suite.prepared val testContext by prepared { - JvmBsonContext(MongoClientSettings.getDefaultCodecRegistry()) + JvmBsonFactory(MongoClientSettings.getDefaultCodecRegistry()) } @OptIn(ExperimentalStdlibApi::class) diff --git a/bson-tests/src/commonMain/kotlin/BsonWriterTest.kt b/bson-tests/src/commonMain/kotlin/BsonWriterTest.kt index 1b2ec67..44a7597 100644 --- a/bson-tests/src/commonMain/kotlin/BsonWriterTest.kt +++ b/bson-tests/src/commonMain/kotlin/BsonWriterTest.kt @@ -25,7 +25,7 @@ import opensavvy.prepared.suite.SuiteDsl @OptIn(LowLevelApi::class, ExperimentalStdlibApi::class) @Suppress("DEPRECATION") fun SuiteDsl.writerTests( - prepareContext: Prepared, + prepareContext: Prepared, ) = suite("BsonPrimitiveWriter") { test("An Int in a root document") { diff --git a/bson-tests/src/commonMain/kotlin/raw/ArrayTest.kt b/bson-tests/src/commonMain/kotlin/raw/ArrayTest.kt index 81af01b..c4a996a 100644 --- a/bson-tests/src/commonMain/kotlin/raw/ArrayTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/ArrayTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -32,7 +32,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/array.json. */ -fun SuiteDsl.array(context: Prepared) = suite("Array") { +fun SuiteDsl.array(context: Prepared) = suite("Array") { testBson( context, "Empty", diff --git a/bson-tests/src/commonMain/kotlin/raw/BinaryTest.kt b/bson-tests/src/commonMain/kotlin/raw/BinaryTest.kt index 309b501..7bb122f 100644 --- a/bson-tests/src/commonMain/kotlin/raw/BinaryTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/BinaryTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -40,7 +40,7 @@ import kotlin.uuid.Uuid * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/binary.json. */ @OptIn(ExperimentalEncodingApi::class, ExperimentalUuidApi::class) -fun SuiteDsl.binary(context: Prepared) = suite("Binary") { +fun SuiteDsl.binary(context: Prepared) = suite("Binary") { testBson( context, "subtype 0x00 (Zero-length)", diff --git a/bson-tests/src/commonMain/kotlin/raw/BooleanTest.kt b/bson-tests/src/commonMain/kotlin/raw/BooleanTest.kt index 0548a69..5b5b583 100644 --- a/bson-tests/src/commonMain/kotlin/raw/BooleanTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/BooleanTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/boolean.json. */ -fun SuiteDsl.boolean(context: Prepared) = suite("Boolean") { +fun SuiteDsl.boolean(context: Prepared) = suite("Boolean") { @Serializable data class B(val b: Boolean) diff --git a/bson-tests/src/commonMain/kotlin/raw/CodeTest.kt b/bson-tests/src/commonMain/kotlin/raw/CodeTest.kt index c0c9942..de950f5 100644 --- a/bson-tests/src/commonMain/kotlin/raw/CodeTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/CodeTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import kotlin.io.encoding.ExperimentalEncodingApi * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/code.json. */ @OptIn(ExperimentalEncodingApi::class) -fun SuiteDsl.code(context: Prepared) = suite("Code") { +fun SuiteDsl.code(context: Prepared) = suite("Code") { testBson( context, "Empty string", diff --git a/bson-tests/src/commonMain/kotlin/raw/DatetimeTest.kt b/bson-tests/src/commonMain/kotlin/raw/DatetimeTest.kt index 4d804e6..d73653e 100644 --- a/bson-tests/src/commonMain/kotlin/raw/DatetimeTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/DatetimeTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -36,7 +36,7 @@ import kotlin.time.Instant * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/datetime.json. */ -fun SuiteDsl.datetime(context: Prepared) = suite("Datetime") { +fun SuiteDsl.datetime(context: Prepared) = suite("Datetime") { @Serializable data class A(val a: Instant) diff --git a/bson-tests/src/commonMain/kotlin/raw/DocumentTest.kt b/bson-tests/src/commonMain/kotlin/raw/DocumentTest.kt index ecc449f..8105e73 100644 --- a/bson-tests/src/commonMain/kotlin/raw/DocumentTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/DocumentTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/document.json. */ -fun SuiteDsl.document(context: Prepared) = suite("Document") { +fun SuiteDsl.document(context: Prepared) = suite("Document") { @Serializable data class A(val a: String) diff --git a/bson-tests/src/commonMain/kotlin/raw/DoubleTest.kt b/bson-tests/src/commonMain/kotlin/raw/DoubleTest.kt index 2d29ae1..41c6aa9 100644 --- a/bson-tests/src/commonMain/kotlin/raw/DoubleTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/DoubleTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -35,7 +35,7 @@ import kotlin.Double.Companion.NaN * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/double.json. */ -fun SuiteDsl.double(context: Prepared) = suite("Double") { +fun SuiteDsl.double(context: Prepared) = suite("Double") { @Serializable data class D(val d: Double) diff --git a/bson-tests/src/commonMain/kotlin/raw/Helpers.kt b/bson-tests/src/commonMain/kotlin/raw/Helpers.kt index e5bb1e1..9e38939 100644 --- a/bson-tests/src/commonMain/kotlin/raw/Helpers.kt +++ b/bson-tests/src/commonMain/kotlin/raw/Helpers.kt @@ -19,8 +19,8 @@ package opensavvy.ktmongo.bson.raw import opensavvy.ktmongo.bson.Bson -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonDocumentReader +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.prepared.suite.Prepared @@ -72,7 +72,7 @@ private class BsonBinaryDeclaration( val writer: BsonFieldWriter.() -> Unit, ) : BsonDeclaration { - fun write(context: BsonContext): Bson = + fun write(context: BsonFactory): Bson = context.buildDocument { writer() } } @@ -83,7 +83,7 @@ private class BsonSerializeDeclaration( ) : BsonDeclaration { @Suppress("UNCHECKED_CAST") - fun write(context: BsonContext): Bson = + fun write(context: BsonFactory): Bson = context.buildDocument(obj, type, klass as KClass) fun toAssertion() = BsonAssertion(obj.toString()) { @@ -114,7 +114,7 @@ private class BsonAssertion( @PreparedDslMarker fun SuiteDsl.testBson( - context: Prepared, + context: Prepared, name: String, vararg declarations: BsonDeclaration, ) = suite(name) { diff --git a/bson-tests/src/commonMain/kotlin/raw/Int32Test.kt b/bson-tests/src/commonMain/kotlin/raw/Int32Test.kt index 9d6edb4..574713c 100644 --- a/bson-tests/src/commonMain/kotlin/raw/Int32Test.kt +++ b/bson-tests/src/commonMain/kotlin/raw/Int32Test.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/int32.json. */ -fun SuiteDsl.int32(context: Prepared) = suite("Int32") { +fun SuiteDsl.int32(context: Prepared) = suite("Int32") { @Serializable data class I(val i: Int) diff --git a/bson-tests/src/commonMain/kotlin/raw/Int64Test.kt b/bson-tests/src/commonMain/kotlin/raw/Int64Test.kt index 9cb5dfa..9f236ab 100644 --- a/bson-tests/src/commonMain/kotlin/raw/Int64Test.kt +++ b/bson-tests/src/commonMain/kotlin/raw/Int64Test.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/int64.json. */ -fun SuiteDsl.int64(context: Prepared) = suite("Int64") { +fun SuiteDsl.int64(context: Prepared) = suite("Int64") { @Serializable data class A(val a: Long) diff --git a/bson-tests/src/commonMain/kotlin/raw/MinMaxKeyTest.kt b/bson-tests/src/commonMain/kotlin/raw/MinMaxKeyTest.kt index bef2b54..341d90c 100644 --- a/bson-tests/src/commonMain/kotlin/raw/MinMaxKeyTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/MinMaxKeyTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -32,7 +32,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from the BSON corpus tests. */ -fun SuiteDsl.minMaxKey(context: Prepared) = suite("MinMaxKey") { +fun SuiteDsl.minMaxKey(context: Prepared) = suite("MinMaxKey") { testBson( context, "Minkey", diff --git a/bson-tests/src/commonMain/kotlin/raw/NullTest.kt b/bson-tests/src/commonMain/kotlin/raw/NullTest.kt index cb5681c..9e30d43 100644 --- a/bson-tests/src/commonMain/kotlin/raw/NullTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/NullTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -32,7 +32,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/null.json. */ -fun SuiteDsl.reprNull(context: Prepared) = suite("Null") { +fun SuiteDsl.reprNull(context: Prepared) = suite("Null") { testBson( context, "Null", diff --git a/bson-tests/src/commonMain/kotlin/raw/ObjectIdTest.kt b/bson-tests/src/commonMain/kotlin/raw/ObjectIdTest.kt index b639e9d..a0f1e4d 100644 --- a/bson-tests/src/commonMain/kotlin/raw/ObjectIdTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/ObjectIdTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -36,7 +36,7 @@ import kotlin.time.ExperimentalTime * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/oid.json. */ -fun SuiteDsl.objectId(context: Prepared) = suite("ObjectId") { +fun SuiteDsl.objectId(context: Prepared) = suite("ObjectId") { @Serializable data class A(val a: ObjectId) diff --git a/bson-tests/src/commonMain/kotlin/raw/RegexTest.kt b/bson-tests/src/commonMain/kotlin/raw/RegexTest.kt index 701f1a4..5e0c96c 100644 --- a/bson-tests/src/commonMain/kotlin/raw/RegexTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/RegexTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -32,7 +32,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/regex.json. */ -fun SuiteDsl.regex(context: Prepared) = suite("Regex") { +fun SuiteDsl.regex(context: Prepared) = suite("Regex") { testBson( context, "Empty regex with no options", diff --git a/bson-tests/src/commonMain/kotlin/raw/StringTest.kt b/bson-tests/src/commonMain/kotlin/raw/StringTest.kt index 2fb1702..8bfaa23 100644 --- a/bson-tests/src/commonMain/kotlin/raw/StringTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/StringTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -34,7 +34,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/string.json. */ -fun SuiteDsl.string(context: Prepared) = suite("String") { +fun SuiteDsl.string(context: Prepared) = suite("String") { @Serializable data class A(val a: String) diff --git a/bson-tests/src/commonMain/kotlin/raw/TimestampTest.kt b/bson-tests/src/commonMain/kotlin/raw/TimestampTest.kt index b20cd44..4260a4d 100644 --- a/bson-tests/src/commonMain/kotlin/raw/TimestampTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/TimestampTest.kt @@ -19,7 +19,7 @@ package opensavvy.ktmongo.bson.raw import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -39,7 +39,7 @@ import kotlin.time.Instant * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/timestamp.json. */ @OptIn(ExperimentalEncodingApi::class) -fun SuiteDsl.timestamp(context: Prepared) = suite("Timestamp") { +fun SuiteDsl.timestamp(context: Prepared) = suite("Timestamp") { @Serializable data class A(val a: Timestamp) diff --git a/bson-tests/src/commonMain/kotlin/raw/UndefinedTest.kt b/bson-tests/src/commonMain/kotlin/raw/UndefinedTest.kt index 3976e3b..f16e366 100644 --- a/bson-tests/src/commonMain/kotlin/raw/UndefinedTest.kt +++ b/bson-tests/src/commonMain/kotlin/raw/UndefinedTest.kt @@ -18,7 +18,7 @@ package opensavvy.ktmongo.bson.raw -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.BsonFactory import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.document import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.hex import opensavvy.ktmongo.bson.raw.BsonDeclaration.Companion.json @@ -32,7 +32,7 @@ import opensavvy.prepared.suite.SuiteDsl * * Adapted from https://github.com/mongodb/specifications/blob/master/source/bson-corpus/tests/undefined.json. */ -fun SuiteDsl.reprUndefined(context: Prepared) = suite("Undefined") { +fun SuiteDsl.reprUndefined(context: Prepared) = suite("Undefined") { testBson( context, "Undefined", diff --git a/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt b/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt index d6bb5fb..699d13b 100644 --- a/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt +++ b/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.coroutines -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.command.* import opensavvy.ktmongo.dsl.query.FilterQuery diff --git a/driver-coroutines/src/commonMain/kotlin/MongoAggregationPipeline.kt b/driver-coroutines/src/commonMain/kotlin/MongoAggregationPipeline.kt index b81d9ca..ed19c76 100644 --- a/driver-coroutines/src/commonMain/kotlin/MongoAggregationPipeline.kt +++ b/driver-coroutines/src/commonMain/kotlin/MongoAggregationPipeline.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.coroutines -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/driver-coroutines/src/commonMain/kotlin/operations/BaseOperations.kt b/driver-coroutines/src/commonMain/kotlin/operations/BaseOperations.kt index fe2b12b..f105e8f 100644 --- a/driver-coroutines/src/commonMain/kotlin/operations/BaseOperations.kt +++ b/driver-coroutines/src/commonMain/kotlin/operations/BaseOperations.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, OpenSavvy and contributors. + * Copyright (c) 2024-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. @@ -16,7 +16,7 @@ package opensavvy.ktmongo.coroutines.operations -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi interface BaseOperations { diff --git a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt index eb10a01..96ed262 100644 --- a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -22,7 +22,9 @@ 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.JvmBsonContext +import opensavvy.ktmongo.bson.official.JvmBsonFactory +import opensavvy.ktmongo.bson.official.types.Jvm +import opensavvy.ktmongo.bson.types.ObjectIdGenerator import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.PipelineChainLink import opensavvy.ktmongo.dsl.command.* @@ -37,6 +39,7 @@ import opensavvy.ktmongo.dsl.query.FilterQuery import opensavvy.ktmongo.dsl.query.UpdateQuery import opensavvy.ktmongo.dsl.query.UpdateWithPipelineQuery import opensavvy.ktmongo.dsl.query.UpsertQuery +import opensavvy.ktmongo.official.JvmBsonContext import opensavvy.ktmongo.official.command.toJava import opensavvy.ktmongo.official.options.* import opensavvy.ktmongo.official.options.toJava @@ -59,8 +62,11 @@ class JvmMongoCollection internal constructor( fun asKotlinClient() = inner @LowLevelApi - override val context: JvmBsonContext = - JvmBsonContext(inner.codecRegistry, nameStrategy = nameStrategy) + override val context = JvmBsonContext( + bsonFactory = JvmBsonFactory(inner.codecRegistry), + objectIdGenerator = ObjectIdGenerator.Jvm(), + nameStrategy = nameStrategy, + ) // region Find diff --git a/driver-shared-kmongo/build.gradle.kts b/driver-shared-kmongo/build.gradle.kts index 79b844f..e161aa6 100644 --- a/driver-shared-kmongo/build.gradle.kts +++ b/driver-shared-kmongo/build.gradle.kts @@ -25,6 +25,7 @@ kotlin { sourceSets.commonMain.dependencies { api(projects.dsl) + implementation(projects.driverSharedOfficial) implementation(libs.kotlinx.serialization) } diff --git a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt index 46b4a80..def89d6 100644 --- a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt +++ b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt @@ -16,11 +16,9 @@ package opensavvy.ktmongo.utils.kmongo -import com.mongodb.MongoClientSettings import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import opensavvy.ktmongo.bson.BsonContext -import opensavvy.ktmongo.bson.official.JvmBsonContext +import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.path.FieldDsl import opensavvy.prepared.runner.testballoon.preparedSuite @@ -33,20 +31,11 @@ data class NameStrategyProfile(val name: String) val KMongoNameStrategyTest by preparedSuite { - val context by prepared { - JvmBsonContext( - codecRegistry = MongoClientSettings.getDefaultCodecRegistry(), - nameStrategy = KMongoNameStrategy(), - ) - } - val fieldDsl by prepared { - val ctx = context() - object : FieldDsl { @LowLevelApi - override val context: BsonContext - get() = ctx + override val context: PropertyNameStrategy + get() = KMongoNameStrategy() } } diff --git a/bson/src/commonMain/kotlin/BsonContext.kt b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt similarity index 53% rename from bson/src/commonMain/kotlin/BsonContext.kt rename to driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt index bb3f25c..c8aae5a 100644 --- a/bson/src/commonMain/kotlin/BsonContext.kt +++ b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024-2025, OpenSavvy and contributors. + * 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. @@ -14,22 +14,18 @@ * limitations under the License. */ -package opensavvy.ktmongo.bson +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 -/** - * Configuration for the BSON serialization. - * - * Instances of this class are platform-specific and are used to create BSON documents. - * Platforms can thus parameterize the behavior of writers and readers. - * - * For example, a platform may store its serialization configuration in this class. - */ -interface BsonContext : ObjectIdGenerator, BsonFactory { - - /** - * The naming strategy used to generate paths. - */ - val nameStrategy: PropertyNameStrategy -} +class JvmBsonContext( + bsonFactory: JvmBsonFactory, + objectIdGenerator: ObjectIdGenerator, + nameStrategy: PropertyNameStrategy, +) : BsonContext, + JvmBsonFactory by bsonFactory, + ObjectIdGenerator by objectIdGenerator, + PropertyNameStrategy by nameStrategy diff --git a/driver-sync/src/commonMain/kotlin/FilteredCollection.kt b/driver-sync/src/commonMain/kotlin/FilteredCollection.kt index 4b2eb82..dcff0c8 100644 --- a/driver-sync/src/commonMain/kotlin/FilteredCollection.kt +++ b/driver-sync/src/commonMain/kotlin/FilteredCollection.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.sync -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.command.* import opensavvy.ktmongo.dsl.query.FilterQuery diff --git a/driver-sync/src/commonMain/kotlin/MongoAggregationPipeline.kt b/driver-sync/src/commonMain/kotlin/MongoAggregationPipeline.kt index 43f6887..201183e 100644 --- a/driver-sync/src/commonMain/kotlin/MongoAggregationPipeline.kt +++ b/driver-sync/src/commonMain/kotlin/MongoAggregationPipeline.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.sync -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/driver-sync/src/commonMain/kotlin/operations/BaseOperations.kt b/driver-sync/src/commonMain/kotlin/operations/BaseOperations.kt index a8a8f8f..e7f9c9c 100644 --- a/driver-sync/src/commonMain/kotlin/operations/BaseOperations.kt +++ b/driver-sync/src/commonMain/kotlin/operations/BaseOperations.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, OpenSavvy and contributors. + * Copyright (c) 2024-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. @@ -16,7 +16,7 @@ package opensavvy.ktmongo.sync.operations -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi interface BaseOperations { diff --git a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt index 861633d..6112f11 100644 --- a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -20,7 +20,9 @@ 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.JvmBsonContext +import opensavvy.ktmongo.bson.official.JvmBsonFactory +import opensavvy.ktmongo.bson.official.types.Jvm +import opensavvy.ktmongo.bson.types.ObjectIdGenerator import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.PipelineChainLink import opensavvy.ktmongo.dsl.command.* @@ -35,6 +37,7 @@ import opensavvy.ktmongo.dsl.query.FilterQuery import opensavvy.ktmongo.dsl.query.UpdateQuery import opensavvy.ktmongo.dsl.query.UpdateWithPipelineQuery import opensavvy.ktmongo.dsl.query.UpsertQuery +import opensavvy.ktmongo.official.JvmBsonContext import opensavvy.ktmongo.official.command.toJava import opensavvy.ktmongo.official.options.* import opensavvy.ktmongo.official.options.toJava @@ -57,8 +60,11 @@ class JvmMongoCollection internal constructor( fun asKotlinClient() = inner @LowLevelApi - override val context: JvmBsonContext = - JvmBsonContext(inner.codecRegistry, nameStrategy = nameStrategy) + override val context = JvmBsonContext( + bsonFactory = JvmBsonFactory(inner.codecRegistry), + objectIdGenerator = ObjectIdGenerator.Jvm(), + nameStrategy = nameStrategy, + ) // region Find diff --git a/dsl/src/commonMain/kotlin/BsonContext.kt b/dsl/src/commonMain/kotlin/BsonContext.kt new file mode 100644 index 0000000..90ea7a3 --- /dev/null +++ b/dsl/src/commonMain/kotlin/BsonContext.kt @@ -0,0 +1,50 @@ +/* + * 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 + +import opensavvy.ktmongo.bson.BsonFactory +import opensavvy.ktmongo.bson.PropertyNameStrategy +import opensavvy.ktmongo.bson.types.ObjectIdGenerator +import kotlin.concurrent.atomics.ExperimentalAtomicApi +import kotlin.time.ExperimentalTime + +/** + * BSON configuration for the objects generated by the DSL. + * + * This object is passed through the entire DSL to allow accessing the configuration from anywhere during request generation. + */ +interface BsonContext : BsonFactory, ObjectIdGenerator, PropertyNameStrategy + +private class BsonContextImpl( + bsonFactory: BsonFactory, + objectIdGenerator: ObjectIdGenerator, + nameStrategy: PropertyNameStrategy, +) : BsonContext, + BsonFactory by bsonFactory, + ObjectIdGenerator by objectIdGenerator, + PropertyNameStrategy by nameStrategy + +/** + * BSON configuration for the objects generated by the DSL. + */ +@ExperimentalTime +@ExperimentalAtomicApi +fun BsonContext( + bsonFactory: BsonFactory, + objectIdGenerator: ObjectIdGenerator = ObjectIdGenerator.Default(), + nameStrategy: PropertyNameStrategy = PropertyNameStrategy.Default, +): BsonContext = BsonContextImpl(bsonFactory, objectIdGenerator, nameStrategy) diff --git a/dsl/src/commonMain/kotlin/aggregation/AccumulationOperators.kt b/dsl/src/commonMain/kotlin/aggregation/AccumulationOperators.kt index 3965cd1..2661832 100644 --- a/dsl/src/commonMain/kotlin/aggregation/AccumulationOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/AccumulationOperators.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.dsl.aggregation -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.aggregation.accumulators.ArithmeticValueAccumulators import opensavvy.ktmongo.dsl.aggregation.accumulators.ValueAccumulators diff --git a/dsl/src/commonMain/kotlin/aggregation/Pipeline.kt b/dsl/src/commonMain/kotlin/aggregation/Pipeline.kt index 85260ff..2c13eb2 100644 --- a/dsl/src/commonMain/kotlin/aggregation/Pipeline.kt +++ b/dsl/src/commonMain/kotlin/aggregation/Pipeline.kt @@ -17,8 +17,8 @@ package opensavvy.ktmongo.dsl.aggregation import opensavvy.ktmongo.bson.Bson -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/Value.kt b/dsl/src/commonMain/kotlin/aggregation/Value.kt index 04d7100..e917475 100644 --- a/dsl/src/commonMain/kotlin/aggregation/Value.kt +++ b/dsl/src/commonMain/kotlin/aggregation/Value.kt @@ -16,10 +16,10 @@ package opensavvy.ktmongo.dsl.aggregation -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonValueWriteable import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.query.FilterQuery import opensavvy.ktmongo.dsl.tree.AbstractBsonNode diff --git a/dsl/src/commonMain/kotlin/aggregation/accumulators/ArithmeticValueAccumulators.kt b/dsl/src/commonMain/kotlin/aggregation/accumulators/ArithmeticValueAccumulators.kt index c30eed9..e88b009 100644 --- a/dsl/src/commonMain/kotlin/aggregation/accumulators/ArithmeticValueAccumulators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/accumulators/ArithmeticValueAccumulators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.accumulators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/ArithmeticValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/ArithmeticValueOperators.kt index 7aa8eb4..38206c4 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/ArithmeticValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/ArithmeticValueOperators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/ArrayValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/ArrayValueOperators.kt index ade6053..9a3daa4 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/ArrayValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/ArrayValueOperators.kt @@ -16,9 +16,9 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/ComparisonValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/ComparisonValueOperators.kt index 06335e3..9a5a794 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/ComparisonValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/ComparisonValueOperators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/ConditionalValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/ConditionalValueOperators.kt index 90be578..760a74e 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/ConditionalValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/ConditionalValueOperators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/StringValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/StringValueOperators.kt index cdcd7d8..2cbc35c 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/StringValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/StringValueOperators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/TrigonometryValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/TrigonometryValueOperators.kt index 295aacc..f9d397f 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/TrigonometryValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/TrigonometryValueOperators.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/TypeValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/TypeValueOperators.kt index cd03ea0..bc025fd 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/TypeValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/TypeValueOperators.kt @@ -16,10 +16,10 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonType import opensavvy.ktmongo.bson.BsonValueWriter import opensavvy.ktmongo.bson.types.ObjectId +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue diff --git a/dsl/src/commonMain/kotlin/aggregation/operators/ValueOperators.kt b/dsl/src/commonMain/kotlin/aggregation/operators/ValueOperators.kt index 158f2dc..44b2d22 100644 --- a/dsl/src/commonMain/kotlin/aggregation/operators/ValueOperators.kt +++ b/dsl/src/commonMain/kotlin/aggregation/operators/ValueOperators.kt @@ -16,9 +16,9 @@ package opensavvy.ktmongo.dsl.aggregation.operators -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonType import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.aggregation.AbstractValue import opensavvy.ktmongo.dsl.aggregation.AggregationOperators diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Count.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Count.kt index c3e253b..126394b 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Count.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Count.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Group.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Group.kt index b29f309..c78c313 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Group.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Group.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Limit.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Limit.kt index 7492be2..9163553 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Limit.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Limit.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Match.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Match.kt index 04ceb1b..e64cce8 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Match.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Match.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Project.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Project.kt index 43562e4..d8dcd16 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Project.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Project.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Sample.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Sample.kt index 5e6d40d..605d48b 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Sample.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Sample.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Set.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Set.kt index ebd8914..22b61c9 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Set.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Set.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Skip.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Skip.kt index ed7e699..5f1b71f 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Skip.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Skip.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Sort.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Sort.kt index adc0d3d..a086aec 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Sort.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Sort.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/UnionWith.kt b/dsl/src/commonMain/kotlin/aggregation/stages/UnionWith.kt index bbc9ed0..64f7f45 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/UnionWith.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/UnionWith.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/aggregation/stages/Unset.kt b/dsl/src/commonMain/kotlin/aggregation/stages/Unset.kt index 72edb6d..0008c1c 100644 --- a/dsl/src/commonMain/kotlin/aggregation/stages/Unset.kt +++ b/dsl/src/commonMain/kotlin/aggregation/stages/Unset.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.aggregation.stages -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/command/BulkWrite.kt b/dsl/src/commonMain/kotlin/command/BulkWrite.kt index 12281bc..74d4611 100644 --- a/dsl/src/commonMain/kotlin/command/BulkWrite.kt +++ b/dsl/src/commonMain/kotlin/command/BulkWrite.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/command/Count.kt b/dsl/src/commonMain/kotlin/command/Count.kt index 0d73a9e..210c76c 100644 --- a/dsl/src/commonMain/kotlin/command/Count.kt +++ b/dsl/src/commonMain/kotlin/command/Count.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.* diff --git a/dsl/src/commonMain/kotlin/command/Delete.kt b/dsl/src/commonMain/kotlin/command/Delete.kt index b4e081a..c237a8b 100644 --- a/dsl/src/commonMain/kotlin/command/Delete.kt +++ b/dsl/src/commonMain/kotlin/command/Delete.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.Options diff --git a/dsl/src/commonMain/kotlin/command/Drop.kt b/dsl/src/commonMain/kotlin/command/Drop.kt index a4d0e98..3228ece 100644 --- a/dsl/src/commonMain/kotlin/command/Drop.kt +++ b/dsl/src/commonMain/kotlin/command/Drop.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.Options diff --git a/dsl/src/commonMain/kotlin/command/Find.kt b/dsl/src/commonMain/kotlin/command/Find.kt index d0a0cda..dc3fcd0 100644 --- a/dsl/src/commonMain/kotlin/command/Find.kt +++ b/dsl/src/commonMain/kotlin/command/Find.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.* diff --git a/dsl/src/commonMain/kotlin/command/Insert.kt b/dsl/src/commonMain/kotlin/command/Insert.kt index 9588df6..8ef7b0d 100644 --- a/dsl/src/commonMain/kotlin/command/Insert.kt +++ b/dsl/src/commonMain/kotlin/command/Insert.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.Options diff --git a/dsl/src/commonMain/kotlin/command/Replace.kt b/dsl/src/commonMain/kotlin/command/Replace.kt index b5bf9a5..5917a67 100644 --- a/dsl/src/commonMain/kotlin/command/Replace.kt +++ b/dsl/src/commonMain/kotlin/command/Replace.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.Options diff --git a/dsl/src/commonMain/kotlin/command/Update.kt b/dsl/src/commonMain/kotlin/command/Update.kt index c0261f2..5a346ce 100644 --- a/dsl/src/commonMain/kotlin/command/Update.kt +++ b/dsl/src/commonMain/kotlin/command/Update.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.Options diff --git a/dsl/src/commonMain/kotlin/command/UpdateWithPipeline.kt b/dsl/src/commonMain/kotlin/command/UpdateWithPipeline.kt index 564ed31..ed3399f 100644 --- a/dsl/src/commonMain/kotlin/command/UpdateWithPipeline.kt +++ b/dsl/src/commonMain/kotlin/command/UpdateWithPipeline.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.command -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.query.FilterQuery diff --git a/dsl/src/commonMain/kotlin/options/LimitOption.kt b/dsl/src/commonMain/kotlin/options/LimitOption.kt index 32debad..c394467 100644 --- a/dsl/src/commonMain/kotlin/options/LimitOption.kt +++ b/dsl/src/commonMain/kotlin/options/LimitOption.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/options/MaxTime.kt b/dsl/src/commonMain/kotlin/options/MaxTime.kt index cea0d02..d6ffef9 100644 --- a/dsl/src/commonMain/kotlin/options/MaxTime.kt +++ b/dsl/src/commonMain/kotlin/options/MaxTime.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi import kotlin.time.Duration diff --git a/dsl/src/commonMain/kotlin/options/Options.kt b/dsl/src/commonMain/kotlin/options/Options.kt index 8c7938d..2370cc7 100644 --- a/dsl/src/commonMain/kotlin/options/Options.kt +++ b/dsl/src/commonMain/kotlin/options/Options.kt @@ -16,10 +16,10 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonValueReader import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.command.Count diff --git a/dsl/src/commonMain/kotlin/options/ReadConcernOption.kt b/dsl/src/commonMain/kotlin/options/ReadConcernOption.kt index 3053b26..0bfb517 100644 --- a/dsl/src/commonMain/kotlin/options/ReadConcernOption.kt +++ b/dsl/src/commonMain/kotlin/options/ReadConcernOption.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/options/ReadPreferenceOption.kt b/dsl/src/commonMain/kotlin/options/ReadPreferenceOption.kt index c833b67..a257001 100644 --- a/dsl/src/commonMain/kotlin/options/ReadPreferenceOption.kt +++ b/dsl/src/commonMain/kotlin/options/ReadPreferenceOption.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.options.ReadPreference.Primary diff --git a/dsl/src/commonMain/kotlin/options/SkipOption.kt b/dsl/src/commonMain/kotlin/options/SkipOption.kt index 3c4536b..ba77ea6 100644 --- a/dsl/src/commonMain/kotlin/options/SkipOption.kt +++ b/dsl/src/commonMain/kotlin/options/SkipOption.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/options/SortOption.kt b/dsl/src/commonMain/kotlin/options/SortOption.kt index 3d099e8..e43f5f6 100644 --- a/dsl/src/commonMain/kotlin/options/SortOption.kt +++ b/dsl/src/commonMain/kotlin/options/SortOption.kt @@ -17,8 +17,8 @@ package opensavvy.ktmongo.dsl.options import opensavvy.ktmongo.bson.Bson -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/options/WriteConcernOption.kt b/dsl/src/commonMain/kotlin/options/WriteConcernOption.kt index a8e1163..06eb21a 100644 --- a/dsl/src/commonMain/kotlin/options/WriteConcernOption.kt +++ b/dsl/src/commonMain/kotlin/options/WriteConcernOption.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.options -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonValueWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/path/Field.kt b/dsl/src/commonMain/kotlin/path/Field.kt index 93cbe7c..1f61c2d 100644 --- a/dsl/src/commonMain/kotlin/path/Field.kt +++ b/dsl/src/commonMain/kotlin/path/Field.kt @@ -16,7 +16,8 @@ package opensavvy.ktmongo.dsl.path -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.bson.PropertyNameStrategy +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi @@ -113,10 +114,10 @@ interface Field { interface FieldDsl { /** - * The context used to generate fields. + * The strategy used when converting from [KProperty1] to [Field]. */ @LowLevelApi - val context: BsonContext + val context: PropertyNameStrategy /** * Converts a Kotlin property into a [Field]. @@ -141,7 +142,7 @@ interface FieldDsl { @KtMongoDsl @OptIn(LowLevelApi::class) val KProperty1.field: Field - get() = FieldImpl(Path(context.nameStrategy.nameOf(this))) + get() = FieldImpl(Path(context.nameOf(this))) /** * Refers to [child] as a nested field of the current field. @@ -205,7 +206,7 @@ interface FieldDsl { @OptIn(LowLevelApi::class) @KtMongoDsl operator fun Field.div(child: KProperty1): Field = - FieldImpl(path / PathSegment.Field(context.nameStrategy.nameOf(child))) + FieldImpl(path / PathSegment.Field(context.nameOf(child))) /** * Refers to a field [child] of the current field, with no compile-time safety. diff --git a/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt b/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt index dc9ce71..d4e39f1 100644 --- a/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt +++ b/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt @@ -19,8 +19,8 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/query/FilterQueryPredicateImpl.kt b/dsl/src/commonMain/kotlin/query/FilterQueryPredicateImpl.kt index ff843ea..5846b26 100644 --- a/dsl/src/commonMain/kotlin/query/FilterQueryPredicateImpl.kt +++ b/dsl/src/commonMain/kotlin/query/FilterQueryPredicateImpl.kt @@ -19,9 +19,9 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.BsonType +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/query/UpdateQueryImpl.kt b/dsl/src/commonMain/kotlin/query/UpdateQueryImpl.kt index 8526556..9adcebb 100644 --- a/dsl/src/commonMain/kotlin/query/UpdateQueryImpl.kt +++ b/dsl/src/commonMain/kotlin/query/UpdateQueryImpl.kt @@ -19,9 +19,9 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter import opensavvy.ktmongo.bson.types.Timestamp +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/query/UpdateWithPipelineQuery.kt b/dsl/src/commonMain/kotlin/query/UpdateWithPipelineQuery.kt index ffbfaa7..d279459 100644 --- a/dsl/src/commonMain/kotlin/query/UpdateWithPipelineQuery.kt +++ b/dsl/src/commonMain/kotlin/query/UpdateWithPipelineQuery.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonMain/kotlin/tree/BsonNode.kt b/dsl/src/commonMain/kotlin/tree/BsonNode.kt index 3006512..0c81756 100644 --- a/dsl/src/commonMain/kotlin/tree/BsonNode.kt +++ b/dsl/src/commonMain/kotlin/tree/BsonNode.kt @@ -17,9 +17,9 @@ package opensavvy.ktmongo.dsl.tree import opensavvy.ktmongo.bson.Bson -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriteable import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.query.FilterQueryPredicate diff --git a/dsl/src/commonMain/kotlin/tree/CompoundBsonNode.kt b/dsl/src/commonMain/kotlin/tree/CompoundBsonNode.kt index 00723ba..c3848e7 100644 --- a/dsl/src/commonMain/kotlin/tree/CompoundBsonNode.kt +++ b/dsl/src/commonMain/kotlin/tree/CompoundBsonNode.kt @@ -16,8 +16,8 @@ package opensavvy.ktmongo.dsl.tree -import opensavvy.ktmongo.bson.BsonContext import opensavvy.ktmongo.bson.BsonFieldWriter +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.DangerousMongoApi import opensavvy.ktmongo.dsl.KtMongoDsl import opensavvy.ktmongo.dsl.LowLevelApi diff --git a/dsl/src/commonTest/kotlin/aggregation/ValueTest.kt b/dsl/src/commonTest/kotlin/aggregation/ValueTest.kt index b575d84..e17a59c 100644 --- a/dsl/src/commonTest/kotlin/aggregation/ValueTest.kt +++ b/dsl/src/commonTest/kotlin/aggregation/ValueTest.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.dsl.aggregation -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.ktmongo.dsl.query.shouldBeBson import opensavvy.ktmongo.dsl.query.testContext diff --git a/dsl/src/commonTest/kotlin/path/FieldTest.kt b/dsl/src/commonTest/kotlin/path/FieldTest.kt index 54b9cdc..1a4f663 100644 --- a/dsl/src/commonTest/kotlin/path/FieldTest.kt +++ b/dsl/src/commonTest/kotlin/path/FieldTest.kt @@ -16,14 +16,10 @@ package opensavvy.ktmongo.dsl.path -import opensavvy.ktmongo.bson.* -import opensavvy.ktmongo.bson.types.ObjectId +import opensavvy.ktmongo.bson.PropertyNameStrategy import opensavvy.ktmongo.dsl.LowLevelApi import opensavvy.prepared.runner.testballoon.preparedSuite -import kotlin.reflect.KClass import kotlin.reflect.KProperty1 -import kotlin.reflect.KType -import kotlin.time.ExperimentalTime val FieldTest by preparedSuite { class Profile( @@ -45,28 +41,7 @@ val FieldTest by preparedSuite { class TestFieldDsl : FieldDsl { @LowLevelApi - override val context: BsonContext - get() = object : BsonContext { - @LowLevelApi - override fun buildDocument(block: BsonFieldWriter.() -> Unit): Bson = throw UnsupportedOperationException() - - @LowLevelApi - override fun buildDocument(obj: T, type: KType, klass: KClass): Bson = throw UnsupportedOperationException() - - @LowLevelApi - override fun readDocument(bytes: ByteArray): Bson = throw UnsupportedOperationException() - - @LowLevelApi - override fun buildArray(block: BsonValueWriter.() -> Unit): BsonArray = throw UnsupportedOperationException() - - @LowLevelApi - override fun readArray(bytes: ByteArray): BsonArray = throw UnsupportedOperationException() - override val nameStrategy: PropertyNameStrategy - get() = PropertyNameStrategy.Default - - @ExperimentalTime - override fun newId(): ObjectId = throw UnsupportedOperationException() - } + override val context: PropertyNameStrategy get() = PropertyNameStrategy.Default // force 'User' to ensure all functions keep the User as the root type infix fun Field.shouldHavePath(path: String) = diff --git a/dsl/src/commonTest/kotlin/query/ExpressionTestUtils.kt b/dsl/src/commonTest/kotlin/query/ExpressionTestUtils.kt index c08d371..6731aea 100644 --- a/dsl/src/commonTest/kotlin/query/ExpressionTestUtils.kt +++ b/dsl/src/commonTest/kotlin/query/ExpressionTestUtils.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext +import opensavvy.ktmongo.dsl.BsonContext import opensavvy.ktmongo.dsl.tree.BsonNode import org.intellij.lang.annotations.Language diff --git a/dsl/src/jvmTest/kotlin/query/ExpressionTestUtils.jvm.kt b/dsl/src/jvmTest/kotlin/query/ExpressionTestUtils.jvm.kt index ed1adcf..9046b33 100644 --- a/dsl/src/jvmTest/kotlin/query/ExpressionTestUtils.jvm.kt +++ b/dsl/src/jvmTest/kotlin/query/ExpressionTestUtils.jvm.kt @@ -16,69 +16,74 @@ package opensavvy.ktmongo.dsl.query -import opensavvy.ktmongo.bson.BsonContext -import opensavvy.ktmongo.bson.official.JvmBsonContext +import opensavvy.ktmongo.bson.official.JvmBsonFactory +import opensavvy.ktmongo.dsl.BsonContext import org.bson.codecs.* import org.bson.codecs.configuration.CodecRegistries import org.bson.codecs.jsr310.InstantCodec import org.bson.codecs.jsr310.LocalDateCodec import org.bson.codecs.jsr310.LocalDateTimeCodec import org.bson.codecs.jsr310.LocalTimeCodec +import kotlin.concurrent.atomics.ExperimentalAtomicApi +import kotlin.time.ExperimentalTime -actual fun testContext(): BsonContext = JvmBsonContext( - codecRegistry = CodecRegistries.fromCodecs( - AtomicBooleanCodec(), - AtomicIntegerCodec(), - AtomicLongCodec(), - BigDecimalCodec(), - BinaryCodec(), - BooleanCodec(), - BsonArrayCodec(), - BsonBinaryCodec(), - BsonBooleanCodec(), - BsonDateTimeCodec(), - BsonDBPointerCodec(), - BsonDecimal128Codec(), - BsonDocumentCodec(), - BsonDoubleCodec(), - BsonInt32Codec(), - BsonInt64Codec(), - BsonJavaScriptCodec(), - BsonMaxKeyCodec(), - BsonMinKeyCodec(), - BsonNullCodec(), - BsonObjectIdCodec(), - BsonRegularExpressionCodec(), - BsonStringCodec(), - BsonSymbolCodec(), - BsonTimestampCodec(), - BsonUndefinedCodec(), - BsonValueCodec(), - ByteArrayCodec(), - ByteCodec(), - CharacterCodec(), - CodeCodec(), - DateCodec(), - Decimal128Codec(), - DocumentCodec(), - DoubleCodec(), - FloatCodec(), - InstantCodec(), - IntegerCodec(), - JsonObjectCodec(), - LocalDateCodec(), - LocalDateTimeCodec(), - LocalTimeCodec(), - LongCodec(), - MaxKeyCodec(), - MinKeyCodec(), - ObjectIdCodec(), - OverridableUuidRepresentationUuidCodec(), - PatternCodec(), - RawBsonDocumentCodec(), - ShortCodec(), - StringCodec(), - SymbolCodec(), - UuidCodec(), +@OptIn(ExperimentalAtomicApi::class, ExperimentalTime::class) +actual fun testContext(): BsonContext = BsonContext( + bsonFactory = JvmBsonFactory( + codecRegistry = CodecRegistries.fromCodecs( + AtomicBooleanCodec(), + AtomicIntegerCodec(), + AtomicLongCodec(), + BigDecimalCodec(), + BinaryCodec(), + BooleanCodec(), + BsonArrayCodec(), + BsonBinaryCodec(), + BsonBooleanCodec(), + BsonDateTimeCodec(), + BsonDBPointerCodec(), + BsonDecimal128Codec(), + BsonDocumentCodec(), + BsonDoubleCodec(), + BsonInt32Codec(), + BsonInt64Codec(), + BsonJavaScriptCodec(), + BsonMaxKeyCodec(), + BsonMinKeyCodec(), + BsonNullCodec(), + BsonObjectIdCodec(), + BsonRegularExpressionCodec(), + BsonStringCodec(), + BsonSymbolCodec(), + BsonTimestampCodec(), + BsonUndefinedCodec(), + BsonValueCodec(), + ByteArrayCodec(), + ByteCodec(), + CharacterCodec(), + CodeCodec(), + DateCodec(), + Decimal128Codec(), + DocumentCodec(), + DoubleCodec(), + FloatCodec(), + InstantCodec(), + IntegerCodec(), + JsonObjectCodec(), + LocalDateCodec(), + LocalDateTimeCodec(), + LocalTimeCodec(), + LongCodec(), + MaxKeyCodec(), + MinKeyCodec(), + ObjectIdCodec(), + OverridableUuidRepresentationUuidCodec(), + PatternCodec(), + RawBsonDocumentCodec(), + ShortCodec(), + StringCodec(), + SymbolCodec(), + UuidCodec(), + ) ) ) -- GitLab From 57bfec9ab0084ec029a1be9f6d94e4d6fa78e008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sun, 23 Nov 2025 16:03:26 +0100 Subject: [PATCH 3/4] refactor(bson): Move PropertyNameStrategy to :dsl --- driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt | 2 +- driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt | 2 +- .../src/jvmTest/kotlin/KMongoNameStrategyTest.kt | 2 +- driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt | 2 +- driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt | 2 +- dsl/src/commonMain/kotlin/BsonContext.kt | 2 +- dsl/src/commonMain/kotlin/path/Field.kt | 1 - .../src/commonMain/kotlin/path}/PropertyNameStrategy.kt | 2 +- dsl/src/commonTest/kotlin/path/FieldTest.kt | 1 - 9 files changed, 7 insertions(+), 9 deletions(-) rename {bson/src/commonMain/kotlin => dsl/src/commonMain/kotlin/path}/PropertyNameStrategy.kt (97%) diff --git a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt index 96ed262..db46292 100644 --- 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.ReplaceOptions 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.command.InsertOneOptions 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 index 09bf72f..edbbdd9 100644 --- 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 index def89d6..686a872 100644 --- a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt +++ b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt @@ -18,9 +18,9 @@ package opensavvy.ktmongo.utils.kmongo 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 index c8aae5a..7563eda 100644 --- 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 index 6112f11..78563e8 100644 --- a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -19,7 +19,6 @@ package opensavvy.ktmongo.sync 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.command.InsertOneOptions 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 index 90ea7a3..bd6629d 100644 --- 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 index 1f61c2d..85906fc 100644 --- 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/bson/src/commonMain/kotlin/PropertyNameStrategy.kt b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt similarity index 97% rename from bson/src/commonMain/kotlin/PropertyNameStrategy.kt rename to dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt index dcb8b9a..cd07c40 100644 --- a/bson/src/commonMain/kotlin/PropertyNameStrategy.kt +++ b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package opensavvy.ktmongo.bson +package opensavvy.ktmongo.dsl.path import opensavvy.ktmongo.dsl.LowLevelApi import kotlin.reflect.KProperty1 diff --git a/dsl/src/commonTest/kotlin/path/FieldTest.kt b/dsl/src/commonTest/kotlin/path/FieldTest.kt index 1a4f663..c8564f4 100644 --- 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 -- GitLab From ae6597ec87e17fbbc163f03973ac9f1fe2e75230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Sun, 23 Nov 2025 16:08:47 +0100 Subject: [PATCH 4/4] refactor(bson): PropertyNameStrategy should generate Paths This will make #96 possible. --- .../src/jvmMain/kotlin/KMongoNameStrategy.kt | 9 +++++---- dsl/src/commonMain/kotlin/path/Field.kt | 6 +++--- dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt index edbbdd9..a9a1e6f 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 85906fc..759114b 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 cd07c40..3307a11 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) } } -- GitLab