ghostdogpr / caliban

Functional GraphQL library for Scala

Home Page:https://ghostdogpr.github.io/caliban/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Scala 3 different schema derivation nested types

guymers opened this issue · comments

The following produces a different schema depending on the Scala version:

sealed trait Level1
object Level1 {
  implicit val schema: Schema[Any, Level1] = Schema.gen

  sealed trait Level2 extends Level1
  object Level2 {
    implicit val schema: Schema[Any, Level2] = Schema.gen

    case class Level3(value: Boolean) extends Level2
    object Level3 {
      implicit val schema: Schema[Any, Level3] = Schema.gen
    }
  }
}

case class Queries(
  level: Level1,
)
object Queries {
  implicit val schema: Schema[Any, Queries] = Schema.gen
}

val schema = {
  val queries = Queries(level = Level1.Level2.Level3(false))
  caliban.graphQL(RootResolver(queries))
}

Scala 2:

schema {
  query: Queries
}

union Level1 = Level3

type Level3 {
  value: Boolean!
}

type Queries {
  level: Level1!
}

Scala 3:

schema {
  query: Queries
}

enum Level1 {
  Level2
}

type Queries {
  level: Level1!
}