Skip to content

Commit

Permalink
Merge pull request #3247 from rparree/array-object-no-props
Browse files Browse the repository at this point in the history
added support for (array of) object without properties
  • Loading branch information
adamw authored Oct 17, 2023
2 parents 1ba70a8 + 87538f2 commit 0474730
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,11 @@ object OpenapiSchemaType {
.downField("type")
.as[Option[String]]
.ensure(DecodingFailure("Given type is not object!", c.history))(v => v.forall(_ == "object"))
f <- c.downField("properties").as[Map[String, OpenapiSchemaType]]
f <- c.downField("properties").as[Option[Map[String, OpenapiSchemaType]]]
r <- c.downField("required").as[Option[Seq[String]]]
nb <- c.downField("nullable").as[Option[Boolean]]
} yield {
OpenapiSchemaObject(f, r.getOrElse(Seq.empty), nb.getOrElse(false))
OpenapiSchemaObject(f.getOrElse(Map.empty), r.getOrElse(Seq.empty), nb.getOrElse(false))
}
}

Expand All @@ -275,7 +275,7 @@ object OpenapiSchemaType {

implicit val OpenapiSchemaArrayDecoder: Decoder[OpenapiSchemaArray] = { (c: HCursor) =>
for {
_ <- c.downField("type").as[String].ensure(DecodingFailure("Given type is not array!", c.history))(v => v == "array")
_ <- c.downField("type").as[String].ensure(DecodingFailure("Given type is not array!", c.history))(v => v == "array" || v == "object")
f <- c.downField("items").as[OpenapiSchemaType]
nb <- c.downField("nullable").as[Option[Boolean]]
} yield {
Expand All @@ -289,8 +289,8 @@ object OpenapiSchemaType {
Decoder[OpenapiSchemaSimpleType].widen,
Decoder[OpenapiSchemaMixedType].widen,
Decoder[OpenapiSchemaNot].widen,
Decoder[OpenapiSchemaObject].widen,
Decoder[OpenapiSchemaMap].widen,
Decoder[OpenapiSchemaObject].widen,
Decoder[OpenapiSchemaArray].widen
).reduceLeft(_ or _)
}
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,22 @@ class SchemaParserSpec extends AnyFlatSpec with Matchers with Checkers {
res shouldBe Right(Seq(OpenapiResponseContent("application/json", OpenapiSchemaArray(OpenapiSchemaString(false), false))))
}

it should "parse array of object without properties yaml" in {
// https://swagger.io/docs/specification/basic-structure/
val yaml =
"""application/json:
| schema:
| type: array
| items:
| type: object
| """.stripMargin

val res = parser
.parse(yaml)
.leftMap(err => err: Error)
.flatMap(_.as[Seq[OpenapiResponseContent]])

res shouldBe Right(Seq(OpenapiResponseContent("application/json", OpenapiSchemaArray(OpenapiSchemaObject(Map.empty, Seq.empty, false), false))))
}

}

0 comments on commit 0474730

Please sign in to comment.