Skip to content

Commit 131f234

Browse files
committed
bluehawk
1 parent bb11588 commit 131f234

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

examples/src/test/kotlin/KotlinXSerializationTest.kt

+29
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.bson.codecs.configuration.CodecRegistries
2626
import org.bson.codecs.kotlinx.BsonConfiguration
2727
import org.bson.codecs.kotlinx.BsonDecoder
2828
import org.bson.codecs.kotlinx.BsonEncoder
29+
import org.bson.codecs.kotlinx.BsonNamingStrategy
2930
import org.bson.codecs.kotlinx.KotlinSerializerCodec
3031
import org.bson.codecs.kotlinx.ObjectIdSerializer
3132
import org.bson.types.ObjectId
@@ -133,6 +134,34 @@ internal class KotlinXSerializationTest {
133134
collection.drop()
134135
}
135136

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+
136165
// :snippet-start: kserializer
137166
object InstantAsBsonDateTime : KSerializer<Instant> {
138167
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("InstantAsBsonDateTime", PrimitiveKind.LONG)
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
val myCustomCodec = KotlinSerializerCodec.create<PaintOrder>(
22
bsonConfiguration = BsonConfiguration(bsonNamingStrategy = BsonNamingStrategy.SNAKE_CASE)
33
)
4+
5+
val registry = CodecRegistries.fromRegistries(
6+
CodecRegistries.fromCodecs(myCustomCodec), collection.codecRegistry
7+
)

source/fundamentals/data-formats/serialization.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ fields into snake case by setting the ``bsonNamingStrategy`` parameter:
256256
import org.bson.codecs.kotlinx.BsonConfiguration
257257
import org.bson.codecs.kotlinx.BsonNamingStrategy
258258

259-
.. literalinclude:: /examples/generated/KotlinXSerializationTest.snippet.snake-case-serialization.kt
259+
.. literalinclude:: /examples/generated/KotlinXSerializationTest.snippet.snake-case-naming.kt
260260
:language: kotlin
261261

262262
.. note::

0 commit comments

Comments
 (0)