Skip to content

Commit 7d1fc6d

Browse files
committed
refactor: handle null values gracefully in JSON encoders
- Updated JSON encoders for `Date`, `DateTime`, and `ObjectId` to map null values to `Json.Null` using `Option`.
1 parent ad7c63c commit 7d1fc6d

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name" : "mongodb-driver",
33
"organization" : "dev.mongocamp",
4-
"version" : "3.0.5.snapshot",
4+
"version" : "3.0.5",
55
"author" : "info@mongocamp.dev",
66
"license" : "Apache-2.0",
77
"type" : "module",

src/main/scala/dev/mongocamp/driver/mongodb/json/CirceSchema.scala

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,12 @@ trait CirceSchema extends CirceProductSchema {
6262
}
6363

6464
implicit val DateFormat: Encoder[Date] with io.circe.Decoder[Date] = new io.circe.Encoder[Date] with io.circe.Decoder[Date] {
65-
override def apply(a: Date): Json = {
66-
Encoder.encodeString.apply(a.toInstant.toString)
65+
override def apply(d: Date): Json = {
66+
Option(d)
67+
.map(
68+
date => Encoder.encodeString.apply(date.toInstant.toString)
69+
)
70+
.getOrElse(Json.Null)
6771
}
6872

6973
override def apply(c: HCursor): Result[Date] = {
@@ -76,8 +80,12 @@ trait CirceSchema extends CirceProductSchema {
7680
}
7781

7882
implicit val DateTimeFormat: Encoder[DateTime] with io.circe.Decoder[DateTime] = new io.circe.Encoder[DateTime] with io.circe.Decoder[DateTime] {
79-
override def apply(a: DateTime): Json = {
80-
Encoder.encodeString.apply(a.toInstant.toString)
83+
override def apply(d: DateTime): Json = {
84+
Option(d)
85+
.map(
86+
date => Encoder.encodeString.apply(date.toInstant.toString)
87+
)
88+
.getOrElse(Json.Null)
8189
}
8290

8391
override def apply(c: HCursor): Result[DateTime] = {
@@ -90,8 +98,12 @@ trait CirceSchema extends CirceProductSchema {
9098
}
9199

92100
implicit val ObjectIdFormat: Encoder[ObjectId] with io.circe.Decoder[ObjectId] = new io.circe.Encoder[ObjectId] with io.circe.Decoder[ObjectId] {
93-
override def apply(a: ObjectId): Json = {
94-
Encoder.encodeString.apply(a.toHexString)
101+
override def apply(o: ObjectId): Json = {
102+
Option(o)
103+
.map(
104+
o => Encoder.encodeString.apply(o.toHexString)
105+
)
106+
.getOrElse(Json.Null)
95107
}
96108

97109
override def apply(c: HCursor): Result[ObjectId] = {

0 commit comments

Comments
 (0)