`rename` fails when applied to derived recursive schema
guymers opened this issue · comments
sealed trait Parameter
object Parameter {
implicit lazy val schema: Schema[Any, Parameter] = Schema.gen[Any, Parameter].rename("ASTParameter")
}
case class Variable(name: String) extends Parameter
object Variable {
implicit val schema: Schema[Any, Variable] = Schema.gen[Any, Variable].rename("ASTVariable")
}
sealed trait Value extends Parameter
object Value {
case class Boolean(value: scala.Boolean) extends Value
object Boolean {
implicit val schema: Schema[Any, Boolean] = Schema.gen[Any, Boolean].rename("ASTValueBoolean")
}
case class List(values: Chunk[Value]) extends Value
object List {
implicit lazy val schema: Schema[Any, List] = Schema.gen[Any, List].rename("ASTValueList")
}
implicit lazy val schema: Schema[Any, Value] = Schema.gen[Any, Value].rename("ASTValue")
}
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))
}
2.3.1
schema {
query: Queries
}
union ASTParameter = ASTValueBoolean | ASTValueList | ASTVariable
union ASTValue = ASTValueBoolean | ASTValueList
type ASTValueList {
values: [ASTValue!]!
}
type ASTValueBoolean {
value: Boolean!
}
type ASTVariable {
name: String!
}
type Queries {
param: ASTParameter!
}
2.4.1
[error] java.lang.StackOverflowError
[error] at magnolia1.CallByNeed.value(magnolia.scala:939)
[error] at magnolia1.Subtype$$anon$1.typeclass(interface.scala:74)
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.$anonfun$toType$11(SchemaDerivation.scala:127)
[error] at scala.collection.immutable.ArraySeq.map(ArraySeq.scala:75)
[error] at scala.collection.immutable.ArraySeq.map(ArraySeq.scala:35)
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.toType(SchemaDerivation.scala:127)
[error] at caliban.schema.Schema.caliban$schema$Schema$$asType(Schema.scala:40)
[error] at caliban.schema.Schema.caliban$schema$Schema$$asType$(Schema.scala:40)
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.caliban$schema$Schema$$asType$lzycompute(SchemaDerivation.scala:123
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.caliban$schema$Schema$$asType(SchemaDerivation.scala:123)
[error] at caliban.schema.Schema.toType_(Schema.scala:52)
[error] at caliban.schema.Schema.toType_$(Schema.scala:51)
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.toType_(SchemaDerivation.scala:123)
[error] at caliban.schema.Schema$$anon$2.<init>(Schema.scala:118)
[error] at caliban.schema.Schema.rename(Schema.scala:110)
[error] at caliban.schema.Schema.rename$(Schema.scala:110)
[error] at caliban.schema.CommonSchemaDerivation$$anon$2.rename(SchemaDerivation.scala:123)
[error] at Test$Value$.schema$lzycompute(Test.scala:37)
[error] at Test$Value$.schema(Test.scala:37)
[error] at Test$Value$List$.schema$lzycompute(Test.scala:34)
[error] at Test$Value$List$.schema(Test.scala:34)
[error] at Test$Value$.$anonfun$schema$16(Test.scala:37)
[error] at magnolia1.CallByNeed.value$lzycompute(magnolia.scala:940)
[error] at magnolia1.CallByNeed.value(magnolia.scala:939)
... repeats
Test.scala:34 = implicit lazy val schema: Schema[Any, List] = Schema.gen[Any, List].rename("ASTValueList")
Test.scala:37 = implicit lazy val schema: Schema[Any, Value] = Schema.gen[Any, Value].rename("ASTValue")
On Scala 3, 2.4.1 hangs, 2.3.1 is fine.
I worked around it by adding GQLName
annotations on the lazy schemas but if possible would be nice if it worked as before to avoid that module needing to depend on caliban.