Scala 3 different schema derivation
guymers opened this issue · comments
The below produces different schemas depending on the Scala version:
@GQLName("ASTParameter")
sealed trait Parameter
object Parameter {
implicit lazy val schema: Schema[Any, Parameter] = Schema.gen
}
@GQLName("ASTVariable")
case class Variable(name: String) extends Parameter
object Variable {
implicit val schema: Schema[Any, Variable] = Schema.gen
}
@GQLName("ASTValue")
sealed trait Value extends Parameter
object Value {
@GQLName("ASTValueBoolean")
case class Boolean(value: scala.Boolean) extends Value
object Boolean {
implicit val schema: Schema[Any, Boolean] = Schema.gen
}
@GQLName("ASTValueList")
case class List(values: Chunk[Value]) extends Value
object List {
implicit lazy val schema: Schema[Any, List] = Schema.gen
}
implicit lazy val schema: Schema[Any, Value] = Schema.gen
}
case class Queries(
param: Parameter,
)
object Queries {
implicit val schema: Schema[Any, Queries] = Schema.gen
}
val schema = {
val queries = Queries(param = Variable("temp"))
graphQL(RootResolver(queries))
}
Scala 2:
schema {
query: Queries
}
union ASTParameter = ASTValueBoolean | ASTValueList | ASTVariable
union ASTValue = ASTValueBoolean | ASTValueList
type ASTValueBoolean {
value: Boolean!
}
type ASTValueList {
values: [ASTValue!]!
}
type ASTVariable {
name: String!
}
type Queries {
param: ASTParameter!
}
Scala 3:
schema {
query: Queries
}
union ASTParameter = ASTValue | ASTVariable
union ASTValue = ASTValueBoolean | ASTValueList
type ASTValueBoolean {
value: Boolean!
}
type ASTValueList {
values: [ASTValue!]!
}
type ASTVariable {
name: String!
}
type Queries {
param: ASTParameter!
}
The Scala 3 schema is invalid due to having the union ASTValue
as a member of the union ASTParameter
.