zio-http icon indicating copy to clipboard operation
zio-http copied to clipboard

StackOverflowError when too many "optional" query parameters defined for Endpoint

Open Andycharalambous opened this issue 7 months ago • 0 comments

Describe the bug If an endpoint has 15 or more optional query parameters any attempt to call it will result in a StackOverflowError unless at least one query param value is provided.

To Reproduce Steps to reproduce the behaviour:

type SOIn = ((Option[String],Option[String],Option[String],Option[String],Option[String],Option[String],Option[String],Option[String],Option[String],Option[String]),Option[String],Option[String],Option[String],Option[String],Option[String])
  private val soEndpoint =
    Endpoint(Method.GET / "so")
      .query[Option[String]](query("a").optional)
      .query[Option[String]](query("b").optional)
      .query[Option[String]](query("c").optional)
      .query[Option[String]](query("d").optional)
      .query[Option[String]](query("e").optional)
      .query[Option[String]](query("f").optional)
      .query[Option[String]](query("g").optional)
      .query[Option[String]](query("h").optional)
      .query[Option[String]](query("i").optional)
      .query[Option[String]](query("j").optional)
      .query[Option[String]](query("k").optional)
      .query[Option[String]](query("l").optional)
      .query[Option[String]](query("m").optional)
      .query[Option[String]](query("n").optional)
      .query[Option[String]](query("o").optional)
      .out[String]

private val soHandler: Handler[Any, zio.ZNothing, SOIn, String] = Handler.fromZIO(ZIO.succeed(""))
private val soRoute: Route[Any, Nothing] = soEndpoint.implementHandler(soHandler)

soRoute.run(Request.get("/so"))
Results in:
 java.lang.StackOverflowError
	at zio.http.Handler$$anon$4.apply(Handler.scala:314)

soRoute.run(Request.get("/so?a=test"))
Results in successfull call

Expected behaviour the request should not result in a StackOverflowError

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context 3.0.0-RC9

Andycharalambous avatar Jul 03 '24 21:07 Andycharalambous