forked from loafle/openapi-generator-original
[scala][client]: scala-http4s scala3 client: minor improvement (allow empty string in optional enum to pass as None) (#21025)
* [scala][http4s][client]: add enum method; remove implicit * improve error handling * more enum enhancement * remove unused * update samle * avoid breaking change * [Scala][Client][HTTP4s]: when enum is optional, avoid throwing exception when it's empty string --------- Co-authored-by: Jenny Leahy <jennyleahy@JENNYLEAHY.localdomain> Co-authored-by: Jenny Leahy <jennyleahy@Mac.localdomain>
This commit is contained in:
parent
3233eff187
commit
80ab53b2ce
@ -56,7 +56,7 @@ object {{classname}} {
|
|||||||
given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { c =>
|
given decoder{{classname}}: Decoder[{{classname}}] = Decoder.instance { c =>
|
||||||
for {
|
for {
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
{{name}} <- c.downField("{{baseName}}").as[{{^required}}Option[{{{dataType}}}]{{/required}}{{#required}}{{{dataType}}}{{/required}}]
|
{{name}} <- {{#isEnumOrRef}}{{^required}}mapEmptyStringToNull(c.downField("{{baseName}}")){{/required}}{{#required}}c.downField("{{baseName}}"){{/required}}{{/isEnumOrRef}}{{^isEnumOrRef}}c.downField("{{baseName}}"){{/isEnumOrRef}}.as[{{^required}}Option[{{{dataType}}}]{{/required}}{{#required}}{{{dataType}}}{{/required}}]
|
||||||
{{/vars}}
|
{{/vars}}
|
||||||
} yield {{classname}}(
|
} yield {{classname}}(
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{{>licenseInfo}}
|
{{>licenseInfo}}
|
||||||
package {{packageName}}
|
package {{packageName}}
|
||||||
|
|
||||||
import io.circe.{Decoder, Encoder, Json}
|
import io.circe.{Decoder, Encoder, Json, ACursor}
|
||||||
import java.time.{Instant, LocalDate, OffsetDateTime}
|
import java.time.{Instant, LocalDate, OffsetDateTime}
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@ -31,4 +31,7 @@ package object models {
|
|||||||
given encodeJson: Encoder[Json] =
|
given encodeJson: Encoder[Json] =
|
||||||
Encoder.encodeString.contramap[Json](_.toString)
|
Encoder.encodeString.contramap[Json](_.toString)
|
||||||
|
|
||||||
|
def mapEmptyStringToNull(f: ACursor): ACursor =
|
||||||
|
f.withFocus(json => if json.toString == "\"\"" then Json.Null else json)
|
||||||
|
|
||||||
}
|
}
|
@ -52,7 +52,7 @@ object Order {
|
|||||||
petId <- c.downField("petId").as[Option[Long]]
|
petId <- c.downField("petId").as[Option[Long]]
|
||||||
quantity <- c.downField("quantity").as[Option[Int]]
|
quantity <- c.downField("quantity").as[Option[Int]]
|
||||||
shipDate <- c.downField("shipDate").as[Option[Instant]]
|
shipDate <- c.downField("shipDate").as[Option[Instant]]
|
||||||
status <- c.downField("status").as[Option[OrderStatus]]
|
status <- mapEmptyStringToNull(c.downField("status")).as[Option[OrderStatus]]
|
||||||
complete <- c.downField("complete").as[Option[Boolean]]
|
complete <- c.downField("complete").as[Option[Boolean]]
|
||||||
} yield Order(
|
} yield Order(
|
||||||
id = id,
|
id = id,
|
||||||
|
@ -53,7 +53,7 @@ object Pet {
|
|||||||
name <- c.downField("name").as[String]
|
name <- c.downField("name").as[String]
|
||||||
photoUrls <- c.downField("photoUrls").as[Seq[String]]
|
photoUrls <- c.downField("photoUrls").as[Seq[String]]
|
||||||
tags <- c.downField("tags").as[Option[Seq[Tag]]]
|
tags <- c.downField("tags").as[Option[Seq[Tag]]]
|
||||||
status <- c.downField("status").as[Option[PetStatus]]
|
status <- mapEmptyStringToNull(c.downField("status")).as[Option[PetStatus]]
|
||||||
} yield Pet(
|
} yield Pet(
|
||||||
id = id,
|
id = id,
|
||||||
category = category,
|
category = category,
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.openapitools.client
|
package org.openapitools.client
|
||||||
|
|
||||||
import io.circe.{Decoder, Encoder, Json}
|
import io.circe.{Decoder, Encoder, Json, ACursor}
|
||||||
import java.time.{Instant, LocalDate, OffsetDateTime}
|
import java.time.{Instant, LocalDate, OffsetDateTime}
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@ -40,4 +40,7 @@ package object models {
|
|||||||
given encodeJson: Encoder[Json] =
|
given encodeJson: Encoder[Json] =
|
||||||
Encoder.encodeString.contramap[Json](_.toString)
|
Encoder.encodeString.contramap[Json](_.toString)
|
||||||
|
|
||||||
|
def mapEmptyStringToNull(f: ACursor): ACursor =
|
||||||
|
f.withFocus(json => if json.toString == "\"\"" then Json.Null else json)
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user