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 0417a589bc187affd6e24b8d609919b639373004..6a832fb5c22def05bb5d2e5795166f0fa7f52774 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 8c1c8a33055276b0a0e1c881d4e26d2aecf0868e..83967837b80a53f006c5dff2adec9f9fd8182874 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 cb938a783b7c126a0c329c6a5412ad83e4c59434..c07c9227e8673e6afafb8a7a8043c04cd77a0286 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 e06e9a22c9c7b898bffa3642a6bedea887114e5a..09dac93cee217099f3486e27126ff026b3246a7e 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 22465dc5e6c869e22112b71091cd40dacb55139b..38312d421555b9efea39fb3d5da4f7598bd60fa0 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 573af22faff2cfe896a02ae9b543a280ab896d0f..0b817c00005d55d551ed4d730a9a41ac350e088c 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 e1368e036642fc9759715a3ffac72477834433ea..2339371ba79fbad6fe3efdf39d6adf9b43c80eec 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 4f9b63fe318b8505d65830c12d0c0337e2cb9cb6..743375100ef41750758cb0a7daebe39e8d236b07 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 ab6e87afb2214f05f9f074ff3558a89151b4052d..68b805e04be3a4a00b5530cd737781604618b026 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 1b2ec67931015345d6ef3a638a8398cd5a45c2ff..44a759758b603550bd900fa0c63e233d1acd880e 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 81af01baddfdec6f81a65b89ada88c2c7d1ecf5e..c4a996a415c187ef2d78adb941313cbc3334738a 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 309b5010df482a7a217e4e1d151c8a6103cb3292..7bb122f1fd13ef375035f599c17ea743bb08c11b 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 0548a69a3a55adeb898426c10401f08d38f93f79..5b5b583101126f37e1831480500f3809d798fc13 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 c0c9942c87ba2d5e8cf417d4290b3054c7268b82..de950f51b6f8a4f34165f5562b0182876ab028ac 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 4d804e6ba5cf71fa43604cd6ea3276246a0f3b92..d73653e205b66356bc908bcf210bf190a68ce12b 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 ecc449f899f754559f5201a669b4bdfa5b740f51..8105e735dff6f41863c58046ad4172f68e1ad7a2 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 2d29ae1e5124c0bd9e3952aa54f3c528e88bd0da..41c6aa937cd84d150546f57fc35ddf28ff0ab877 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 e5bb1e1d57099bf2c5f3e29e1a2071485e4fe63b..9e389390cd4672fa7e03b62352f7a00e8060e476 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 9d6edb44c2b66caa0329ff7380976f466193d857..574713cd8577cf5de826e8864bc2d64dd76d756e 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 9cb5dfa511a1cdbfc7f78b6e56abcbfab5e7307c..9f236ab20e8f7d0f83b49f5da91133d089401ffd 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 bef2b544069dcd5353dae7b355d37c822d734bc3..341d90ceb344cd28761517125d1f0fc34081fa9c 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 cb5681c9aa5457379807bc062cf3affa1cc0c9ef..9e30d43ab644f13c704ecf62fd723289a0a1ff68 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 b639e9dbbddda59d1bfc825147a5cfcc21c052e5..a0f1e4d02eb12eec4d1cade3952cd105f46e8586 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 701f1a4616f1d60b6d402618c1b8d8a40a670aa2..5e0c96c6b67f02a07a6097ecdb85f1e28a5acd97 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 2fb1702a91b4091279b60c9f56d5af199ae58d59..8bfaa23b039ef3409b67624dc316407636b78130 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 b20cd445d268efa6098c01a92c70682d4cefe918..4260a4d71ac488734bcc14fe8826ac7ea6595b07 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 3976e3b3c2d86e5ea8697659561bfcfd1648ac57..f16e366164b00c8fcf2481e3d8b3118de3192805 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/bson/src/commonMain/kotlin/BsonContext.kt b/bson/src/commonMain/kotlin/BsonFactory.kt similarity index 87% rename from bson/src/commonMain/kotlin/BsonContext.kt rename to bson/src/commonMain/kotlin/BsonFactory.kt index a7fe69761cab8c46f77cfa1823d5fa54693b8678..1c891d58c0a71d8c22bee18ba549e7a4d50f1d35 100644 --- a/bson/src/commonMain/kotlin/BsonContext.kt +++ b/bson/src/commonMain/kotlin/BsonFactory.kt @@ -16,21 +16,18 @@ 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. + * Entrypoint for creating [Bson] and [BsonArray] instances. * - * 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. + * Instances of this interface are platform-specific and are used to create BSON documents. + * Each instance may allow parameterization of some behaviors. */ -interface BsonContext : ObjectIdGenerator { +interface BsonFactory { /** * Instantiates a new [BSON document][Bson]. @@ -146,10 +143,6 @@ interface BsonContext : ObjectIdGenerator { @LowLevelApi fun readArray(bytes: ByteArray): BsonArray - /** - * The naming strategy used to generate paths. - */ - val nameStrategy: PropertyNameStrategy } /** @@ -161,5 +154,5 @@ interface BsonContext : ObjectIdGenerator { * @see Bson.read The inverse operation. */ @OptIn(LowLevelApi::class) -inline fun BsonContext.write(obj: T): Bson = +inline fun BsonFactory.write(obj: T): Bson = buildDocument(obj, typeOf(), T::class) diff --git a/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt b/driver-coroutines/src/commonMain/kotlin/FilteredCollection.kt index d6bb5fbbf04ffef36cceb643c897bbff5802b767..699d13ba4a948a42daa7128cbc4a89ef2c0d64a4 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 b81d9ca84a3124d9f259235a5b454d68fcfedcb4..ed19c76833fb8cffbf6294d965cd8d7fda517fa8 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 fe2b12b0ccd98a2daa19fef76977ef7478a4292a..f105e8f91c2e1841c26d9dc02c887e7677979c62 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 eb10a019b46ec71e224835830513a3e736d56d1a..db462925d70cc4bf169bc854e5f02b422c135c82 100644 --- a/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-coroutines/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -21,8 +21,9 @@ 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.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.* @@ -33,10 +34,12 @@ 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 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 79b844fbfd611c03e714590ce40708464c62babb..e161aa6a4f78f4ff54a598ece74beb31079201f2 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/jvmMain/kotlin/KMongoNameStrategy.kt b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt index 09bf72f2fcbf55445fd70f0fb7f6a6eada2ec67a..a9a1e6fdb79cbd564b946f511a9c7249de2775e3 100644 --- a/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt +++ b/driver-shared-kmongo/src/jvmMain/kotlin/KMongoNameStrategy.kt @@ -17,8 +17,9 @@ package opensavvy.ktmongo.utils.kmongo import kotlinx.serialization.SerialName -import opensavvy.ktmongo.bson.PropertyNameStrategy 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 import kotlin.reflect.KProperty1 @@ -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/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt index 46b4a80e4c7add3a8d4ee91090f7139d4c7aa062..686a872c641b3b3d2286331feda1f88994bbac5c 100644 --- a/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt +++ b/driver-shared-kmongo/src/jvmTest/kotlin/KMongoNameStrategyTest.kt @@ -16,13 +16,11 @@ 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.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 @@ -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/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt new file mode 100644 index 0000000000000000000000000000000000000000..7563edaa9ea424216fad22fde7fc613b001bfbc4 --- /dev/null +++ b/driver-shared-official/src/jvmMain/kotlin/JvmBsonContext.kt @@ -0,0 +1,31 @@ +/* + * 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.official + +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, + 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 4b2eb82b43a9917e466fb85ec3fe1fed1f572d40..dcff0c829f3b703df2cfa0169673b270029ba2e4 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 43f6887d0e3f9f6b6b1ad1d56ba7aea4a99f6c72..201183e8846d69edfa6506e7262abb44e6ed4ef4 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 a8a8f8fc2e84f33fdb2813084a5cba6e5e949bf8..e7f9c9cee7e2bbd46259f4181fb9227422f092d0 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 861633d1f76d4d9bab48621f42346f74c88597c1..78563e8df2baa9d4d3804ff061c4ce0fd169513f 100644 --- a/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt +++ b/driver-sync/src/jvmMain/kotlin/JvmMongoCollection.kt @@ -19,8 +19,9 @@ 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.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.* @@ -31,10 +32,12 @@ 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 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 0000000000000000000000000000000000000000..bd6629d78e0d226f7ff0071dd839f053dd73bb8d --- /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.types.ObjectIdGenerator +import opensavvy.ktmongo.dsl.path.PropertyNameStrategy +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 3965cd1db5d56caa924ec4e9557ffb2e947b3c98..2661832295bbe79331a65f804d8e7bd02751e6c9 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 85260ffcf42fa6fd23ab531e43bf4667f4e957a5..2c13eb2bbd39b493befe00b420ca6e2749c0325b 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 04d7100ccf6caf491cfbbb06b15f12432b0893ba..e917475aaa427637652ae67e1cdc275bd86a444d 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 c30eed9e4cebdd06341a41b03e174675ea632b81..e88b009e2cdcc7e3626ec864500c0e849acfd78f 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 7aa8eb4ac7a1380b186b372a55fa136dc45e73c9..38206c474e222da2e432df81e3d6daf626a4af85 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 ade6053826dba530470c60ced3fc3df138331ede..9a3daa4479da06b7b56b3f5c5ed500174cf21c5b 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 06335e38b44ff9a2e27e7ebdeacefca5d3d5da7b..9a5a7945b8419590e45c821c01bebe4a78331ec1 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 90be5782273a664d7fdaf656107065624dc6ae07..760a74e8596036004e87cf77aa39af4eaec728a0 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 cdcd7d8f0d05279eed139019adeccddee55f45df..2cbc35c100dae6f6fd5d16e59cafa0f3ca6a7d85 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 295aaccce61196f3defa3fb272717e0018d8eb2d..f9d397f28893548bd03f6732ec9671d20d674020 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 cd03ea022be8963e16239fa0e2aeac9fc69eb957..bc025fdf31f2a9aa22ada39ee24510a2c3a9c6fb 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 158f2dc30dd661751ca9b1dd685c5e22816493ce..44b2d223fa774d564606ddda9fc87967af56cb60 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 c3e253b76428b7dab846244b10428984314c9b97..126394b3225a3171f6240402e67a472eb173630e 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 b29f30983097b9405ddccb4234a9779c53d4c942..c78c31380a377a7ad375055d4e7fedd009864fa0 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 7492be250a4c38a6f33ce07464336cc273025344..9163553dc2ceb5589605d5e5100eb5be4ee0da63 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 04ceb1bc8ecf19b0cd74c721ef4da9604870e530..e64cce81d3b5547b6417b9bb0015ceae073dead5 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 43562e4c28c754f674c361b46b5cbe4edc6da62e..d8dcd16d11eead2c9eec7712fdaa757fb1ad01e4 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 5e6d40dc22766b0def3d90b36a068833f4fd5a51..605d48b4d04d5e98f896d0f5c576473d9f80d2bd 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 ebd89142bb20901eec171a7f3b7ebe4b9f21f25a..22b61c9ef7c7757deb05a9ff89446c628ea62fdc 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 ed7e699525ed47ab65415ae6f43e60235db3e18c..5f1b71f5083be3873d39e9f9e970874a09c6d0d9 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 adc0d3dcea7da93c7272c3623c517d1919ae16a5..a086aec1637c40b1f2c03d8bf3331e18ec134d2d 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 bbc9ed0f4fc723a83e0e786935bf366a8f18b167..64f7f457c655405822956101cc4cbc53e78fcca1 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 72edb6dcdc9536004be9e2b77746f5e575b2a504..0008c1c48e3676e21b398fde62fc674b8f057566 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 12281bc5c955b3116a0ddba245235270956a8528..74d46114b60a27fd95804f5a5c8e5f6adc11d3ab 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 0d73a9e02d015f79f304191d47b221a94a644dec..210c76c96facdb45f12dd9e14873f51b2fa866fc 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 b4e081a18e84358b285855834c42dfa9aa312013..c237a8b4aada080415517448bbb1cc064b47a75d 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 a4d0e986441aee16479ef8f89f9459badd5279a3..3228ece9bb92198107f64ba9944482a13737b4ef 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 d0a0cdaa9f1416bfd17bc22229d48ffbb15a3056..dc3fcd0885e1a8c5a295400b551ec4fb8276924f 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 9588df679f0b477c6b06d2e8ae56d23f78d16ea1..8ef7b0de18aad0ebaba8a6ce65f56ef197d8a7e8 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 b5bf9a546b5816665837007a2112edb8fc2e9985..5917a67a414e0518fde55f7ade2eb52b281265e8 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 c0261f23666946e244ea20a315bae26334bb3cce..5a346ce71ce8e7193c64d271685cd36a625c11cf 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 564ed31c89cc693661d5513ae7e37be23a00b2b5..ed3399f5a83dd200f65daa251bccee3ea91a47a5 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 32debad640cc97f380f2097501f6342d53f07afe..c394467c68d36448d35469ce8cce9d60c414082d 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 cea0d02cc841fb039db00e2f03c3aac01e5fbed5..d6ffef9b97255f9f4d7588ed215af1740e39cfda 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 8c7938d5ab45275c8c6890ee7d9709b9ab6d259b..2370cc7d7c606c7083ba990e439814d1204e0453 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 3053b264429231238525fef51a447155c2d1edf2..0bfb517e3ef8dc89fd64ada0476415165da4f990 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 c833b67f4d43ad139690cc4a08b92332bcc94b74..a257001904bd9153433c57f629893bc3dead901a 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 3c4536bee788ffd92e346d40af76b273cc3550b6..ba77ea6fa5a02ea2031929e3f213579b9b546d21 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 3d099e830ff6931505c343ad121cda2fed3cce48..e43f5f60322c63ff791d0dad38ed0b703a884240 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 a8e11634c88b9a3132650b8acf70d21262e624e5..06eb21a00b31abf7255055342e0fbc3f5e214f1d 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 93cbe7cc7645039879f4db3199a11e87fe0121de..759114b39d0fb0d13e27dce59a31331906cab4d6 100644 --- a/dsl/src/commonMain/kotlin/path/Field.kt +++ b/dsl/src/commonMain/kotlin/path/Field.kt @@ -16,7 +16,7 @@ package opensavvy.ktmongo.dsl.path -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 @@ -113,10 +113,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 +141,7 @@ interface FieldDsl { @KtMongoDsl @OptIn(LowLevelApi::class) val KProperty1.field: Field - get() = FieldImpl(Path(context.nameStrategy.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.nameStrategy.nameOf(child))) + FieldImpl(path / context.pathOf(child)) /** * Refers to a field [child] of the current field, with no compile-time safety. diff --git a/bson/src/commonMain/kotlin/PropertyNameStrategy.kt b/dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt similarity index 88% rename from bson/src/commonMain/kotlin/PropertyNameStrategy.kt rename to dsl/src/commonMain/kotlin/path/PropertyNameStrategy.kt index dcb8b9a7df79ee1e1370efc6cee9bb7c7c2856eb..3307a11cb31f3fea4cc7802ff0aafbde889701f1 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 @@ -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) } } diff --git a/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt b/dsl/src/commonMain/kotlin/query/FilterQueryImpl.kt index dc9ce715882cf72b411c9bbef1c2ef086628d036..d4e39f1208f607cd365eeb711fca844d9c8d3105 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 ff843eaa0b0303aa7c318c7387138fc3fcb67ae0..5846b269cca6c0368737ee44e312760fcf1adb46 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 8526556bd7dcfc0b22a9aa22aaed9ad00333f7cb..9adcebb6f53ff6ca5b24d57a8846d68d13b2ecb2 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 ffbfaa7ad32e118433c3995f2cbcf77651face18..d2794592d7b9a7a208b4dad137db1430e2f81421 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 30065123bd60e41223230a62a723ddd2875252da..0c817568fcaa81b68ad95ab2ebe95038ef11e0bf 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 00723ba78804575f1478f44568a9788160a06471..c3848e7ea7cb2eb192f27dff9f9022bf54d76415 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 b575d84f44c5904df74b5a401e21272e1bb28ece..e17a59ca97b1eb8493de04aef828b5abd3122948 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 54b9cdc56cd346ab9448e4df2bd6bb5fefeb90e9..c8564f4a4f1124bb0d367a9543a2e9f6f7761a6c 100644 --- a/dsl/src/commonTest/kotlin/path/FieldTest.kt +++ b/dsl/src/commonTest/kotlin/path/FieldTest.kt @@ -16,14 +16,9 @@ package opensavvy.ktmongo.dsl.path -import opensavvy.ktmongo.bson.* -import opensavvy.ktmongo.bson.types.ObjectId 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 +40,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 c08d3712536ed8bd2ce7c798fa87cb86d3b85da6..6731aeaa98bfa2cfef659acc660c053e51d10978 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 ed1adcfcf3aee188927b2ea1e80c975a2a4ab156..9046b3300357cecde160a90ab9bab78ba89b3299 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(), + ) ) )