Skip to content

Commit f57a033

Browse files
authored
Use Circe Extras To Consider Default Values In JSON Codecs
Merge pull request #8 from ChetanBhasin/default-codecs
2 parents a39095a + 234106d commit f57a033

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

build.sbt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ lazy val sharedDependencies =
3030
circeRefined,
3131
circeCore,
3232
circeParser,
33+
circeExtras,
3334
circeGeneric,
3435
circeDerivation,
3536
scalaCompat,

openapi-scala/src/main/scala/com/enfore/apis/generator/ScalaGenerator.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ object ScalaGenerator {
175175
s"""
176176
|package $packageName\n
177177
|import io.circe._
178-
|import io.circe.derivation._\n${refinementImports.getOrElse("")}
178+
|import io.circe.generic.extras.Configuration
179+
|import io.circe.generic.extras.semiauto._\n${refinementImports.getOrElse("")}
179180
|$docs
180181
|final case class $typeName${values
181182
.map(
@@ -184,6 +185,7 @@ object ScalaGenerator {
184185
)
185186
.mkString("(\n\t", ",\n\t", "\n)")} \n
186187
|object $typeName {
188+
|\timplicit val customConfig = Configuration.default.withDefaults
187189
|\timplicit val circeDecoder: Decoder[$typeName] = deriveDecoder[$typeName](renaming.snakeCase, true, None)
188190
|\timplicit val circeEncoder: Encoder[$typeName] = deriveEncoder[$typeName](renaming.snakeCase, None)${refinedCode
189191
.getOrElse("")}

openapi-scala/src/test/scala/com/enfore/apis/generator/ComponentsTypeReprSpec.scala

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,16 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
2929
|package com.enfore.apis
3030
|
3131
|import io.circe._
32-
|import io.circe.derivation._
32+
|import io.circe.generic.extras.Configuration
33+
|import io.circe.generic.extras.semiauto._
3334
|
3435
|/**
3536
|* Test Summary
3637
|**/
3738
|final case class Person(name: String, age: Int)
3839
|
3940
|object Person {
41+
| implicit val customConfig = Configuration.default.withDefaults
4042
| implicit val circeDecoder: Decoder[Person] = deriveDecoder[Person](renaming.snakeCase, true, None)
4143
| implicit val circeEncoder: Encoder[Person] = deriveEncoder[Person](renaming.snakeCase, None)
4244
|}
@@ -61,11 +63,13 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
6163
|package com.enfore.apis
6264
|
6365
|import io.circe._
64-
|import io.circe.derivation._
66+
|import io.circe.generic.extras.Configuration
67+
|import io.circe.generic.extras.semiauto._
6568
|
6669
|final case class Person()
6770
|
6871
|object Person {
72+
| implicit val customConfig = Configuration.default.withDefaults
6973
| implicit val circeDecoder: Decoder[Person] = deriveDecoder[Person](renaming.snakeCase, true, None)
7074
| implicit val circeEncoder: Encoder[Person] = deriveEncoder[Person](renaming.snakeCase, None)
7175
|}
@@ -93,11 +97,13 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
9397
|package com.enfore.apis
9498
|
9599
|import io.circe._
96-
|import io.circe.derivation._
100+
|import io.circe.generic.extras.Configuration
101+
|import io.circe.generic.extras.semiauto._
97102
|
98103
|final case class Person(name: com.enfore.apis.Name, age: Int)
99104
|
100105
|object Person {
106+
| implicit val customConfig = Configuration.default.withDefaults
101107
| implicit val circeDecoder: Decoder[Person] = deriveDecoder[Person](renaming.snakeCase, true, None)
102108
| implicit val circeEncoder: Encoder[Person] = deriveEncoder[Person](renaming.snakeCase, None)
103109
|}
@@ -148,11 +154,13 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
148154
|package com.enfore.apis
149155
|
150156
|import io.circe._
151-
|import io.circe.derivation._
157+
|import io.circe.generic.extras.Configuration
158+
|import io.circe.generic.extras.semiauto._
152159
|
153160
|final case class Person(name: com.enfore.apis.Name = com.enfore.apis.Name.MAGIC, age: Int)
154161
|
155162
|object Person {
163+
| implicit val customConfig = Configuration.default.withDefaults
156164
| implicit val circeDecoder: Decoder[Person] = deriveDecoder[Person](renaming.snakeCase, true, None)
157165
| implicit val circeEncoder: Encoder[Person] = deriveEncoder[Person](renaming.snakeCase, None)
158166
|}
@@ -184,7 +192,8 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
184192
|package com.enfore.apis
185193
|
186194
|import io.circe._
187-
|import io.circe.derivation._
195+
|import io.circe.generic.extras.Configuration
196+
|import io.circe.generic.extras.semiauto._
188197
|
189198
|final case class ParamedType(optionalVal: Option[String],
190199
| listVal: List[Int],
@@ -193,6 +202,7 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
193202
| listOpVal: List[Option[Double]])
194203
|
195204
| object ParamedType {
205+
| implicit val customConfig = Configuration.default.withDefaults
196206
| implicit val circeDecoder: Decoder[ParamedType] = deriveDecoder[ParamedType](renaming.snakeCase, true, None)
197207
| implicit val circeEncoder: Encoder[ParamedType] = deriveEncoder[ParamedType](renaming.snakeCase, None)
198208
| }
@@ -220,7 +230,8 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
220230
|package com.enfore.apis
221231
|
222232
|import io.circe._
223-
|import io.circe.derivation._
233+
|import io.circe.generic.extras.Configuration
234+
|import io.circe.generic.extras.semiauto._
224235
|
225236
|import eu.timepit.refined._
226237
|import eu.timepit.refined.api._
@@ -233,6 +244,7 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
233244
|final case class RefinedType(stringVal : String Refined AllOf[MinSize[W.`3`.T] :: MaxSize[W.`3`.T] :: HNil])
234245
|
235246
|object RefinedType {
247+
| implicit val customConfig = Configuration.default.withDefaults
236248
| implicit val circeDecoder: Decoder[RefinedType] = deriveDecoder[RefinedType](renaming.snakeCase, true, None)
237249
| implicit val circeEncoder: Encoder[RefinedType] = deriveEncoder[RefinedType](renaming.snakeCase, None)
238250
| object RefinementConstructors {
@@ -316,7 +328,8 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
316328
|package com.enfore.apis
317329
|
318330
|import io.circe._
319-
|import io.circe.derivation._
331+
|import io.circe.generic.extras.Configuration
332+
|import io.circe.generic.extras.semiauto._
320333
|
321334
|import eu.timepit.refined._
322335
|import eu.timepit.refined.api._
@@ -329,6 +342,7 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
329342
|final case class RefinedType(listString : List[String] Refined AllOf[MinSize[W.`3`.T] :: MaxSize[W.`3`.T] :: HNil])
330343
|
331344
|object RefinedType {
345+
| implicit val customConfig = Configuration.default.withDefaults
332346
| implicit val circeDecoder: Decoder[RefinedType] = deriveDecoder[RefinedType](renaming.snakeCase, true, None)
333347
| implicit val circeEncoder: Encoder[RefinedType] = deriveEncoder[RefinedType](renaming.snakeCase, None)
334348
| object RefinementConstructors {
@@ -363,7 +377,8 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
363377
|package com.enfore.apis
364378
|
365379
|import io.circe._
366-
|import io.circe.derivation._
380+
|import io.circe.generic.extras.Configuration
381+
|import io.circe.generic.extras.semiauto._
367382
|
368383
|
369384
|import eu.timepit.refined._
@@ -377,6 +392,7 @@ class ComponentsTypeReprSpec extends AnyFlatSpec with Matchers {
377392
|final case class RefinedType(nested : Option[String Refined AllOf[MinSize[W.`2`.T] :: MaxSize[W.`2`.T] :: HNil]])
378393
|
379394
| object RefinedType {
395+
| implicit val customConfig = Configuration.default.withDefaults
380396
| implicit val circeDecoder: Decoder[RefinedType] = deriveDecoder[RefinedType](renaming.snakeCase, true, None)
381397
| implicit val circeEncoder: Encoder[RefinedType] = deriveEncoder[RefinedType](renaming.snakeCase, None)
382398
|

project/Dependencies.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object Dependencies {
1313
lazy val circeCore = "io.circe" %% "circe-core" % "0.13.0"
1414
lazy val circeParser = "io.circe" %% "circe-parser" % "0.13.0"
1515
lazy val circeGeneric = "io.circe" %% "circe-generic" % "0.13.0"
16+
lazy val circeExtras = "io.circe" %% "circe-generic-extras" % "0.13.0"
1617
lazy val circeYaml = "io.circe" %% "circe-yaml" % "0.13.0"
1718
lazy val circeDerivation = "io.circe" %% "circe-derivation" % "0.13.0-M4"
1819
lazy val scalaCompat = "org.scala-lang.modules" %% "scala-collection-compat" % "2.1.2"

0 commit comments

Comments
 (0)