ghostdogpr / caliban

Functional GraphQL library for Scala

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`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.