@@ -26,6 +26,7 @@ import org.bson.codecs.configuration.CodecRegistries
26
26
import org.bson.codecs.kotlinx.BsonConfiguration
27
27
import org.bson.codecs.kotlinx.BsonDecoder
28
28
import org.bson.codecs.kotlinx.BsonEncoder
29
+ import org.bson.codecs.kotlinx.BsonNamingStrategy
29
30
import org.bson.codecs.kotlinx.KotlinSerializerCodec
30
31
import org.bson.codecs.kotlinx.ObjectIdSerializer
31
32
import org.bson.types.ObjectId
@@ -133,6 +134,34 @@ internal class KotlinXSerializationTest {
133
134
collection.drop()
134
135
}
135
136
137
+ @Test
138
+ fun snakeCaseNamingTest () = runBlocking {
139
+ @Serializable
140
+ data class PaintOrder (
141
+ val ManufacturerName : String ,
142
+ val QuantityOfCans : Int ,
143
+ )
144
+
145
+ val collection = database.getCollection<PaintOrder >(" orders2" )
146
+
147
+ // :snippet-start: snake-case-naming
148
+ val myCustomCodec = KotlinSerializerCodec .create<PaintOrder >(
149
+ bsonConfiguration = BsonConfiguration (bsonNamingStrategy = BsonNamingStrategy .SNAKE_CASE )
150
+ )
151
+
152
+ val registry = CodecRegistries .fromRegistries(
153
+ CodecRegistries .fromCodecs(myCustomCodec), collection.codecRegistry
154
+ )
155
+ // :snippet-end:
156
+
157
+ val paint = PaintOrder (" Acme" , 10 )
158
+ collection.withCodecRegistry(registry).insertOne(paint)
159
+ val result = collection.withDocumentClass<Document >().find().first().toJson()
160
+ assertTrue(result.contains(" quantity_of_cans" ))
161
+ assertFalse(result.contains(" ManufacturerName" ))
162
+ collection.drop()
163
+ }
164
+
136
165
// :snippet-start: kserializer
137
166
object InstantAsBsonDateTime : KSerializer<Instant> {
138
167
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor (" InstantAsBsonDateTime" , PrimitiveKind .LONG )
0 commit comments