zio-http
zio-http copied to clipboard
StackOverflowError when too many "optional" query parameters defined for Endpoint
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