-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support Scala 3, drop Scala 2.12 & Play 2.8 #165
base: main
Are you sure you want to change the base?
Conversation
0d5dab3
to
83e81a2
Compare
def logout = Action { implicit request => | ||
def logout: Action[AnyContent] = Action { implicit request => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Explicitly declaring the return type is necessary here or Scala 3 reports an 'ambiguous overload' error:
[error] -- [E051] Reference Error: /Users/Roberto_Tyley/code/pan-domain-authentication/pan-domain-auth-example/app/controllers/AdminController.scala:42:15
[error] 42 | def logout = Action { implicit request =>
[error] | ^^^^^^
[error] |Ambiguous overload. The overloaded alternatives of method apply in trait ActionBuilder with types
[error] | (block: play.api.mvc.Request[play.api.mvc.AnyContent] => play.api.mvc.Result):
[error] | play.api.mvc.Action[play.api.mvc.AnyContent]
[error] | [A]
[error] | (bodyParser: play.api.mvc.BodyParser[A]):
[error] | play.api.mvc.ActionBuilder[play.api.mvc.Request, A]
[error] |both match arguments (<?> => <?>)
[error] |
[error] | longer explanation available when compiling with `-explain`
83e81a2
to
053c2b0
Compare
import play.api.libs.ws.{WSClient, WSResponse} | ||
import play.api.libs.ws._ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Panda's OAuth
class posts some url-encoded data (defined as Map[String, Seq[String]]
in Scala) with ws.url(dd.token_endpoint).post
:
Lines 73 to 81 in 2c378ad
ws.url(dd.token_endpoint).post { | |
Map( | |
"code" -> code, | |
"client_id" -> Seq(config.clientId), | |
"client_secret" -> Seq(config.clientSecret), | |
"redirect_uri" -> Seq(redirectUrl), | |
"grant_type" -> Seq("authorization_code") | |
) | |
}.flatMap { response => |
This needs an implicit instance of BodyWritable[Map[String, Seq[String]]]
in order to work! For some reason, in Scala 2, the compiler was able to find the correct implicit somewhere, but in Scala 3 we get a compilation error:
[error] 81 | }.flatMap { response =>
[error] | ^
[error] |Cannot find an instance of Map[K, Seq[String]] to WSBody. Define a BodyWritable[Map[K, Seq[String]]] or extend play.api.libs.ws.ahc.DefaultBodyWritables
[error] |
[error] |where: K is a type variable with constraint >: String
[error] |
[error] |One of the following imports might fix the problem:
[error] |
[error] |
[error] |One of the following imports might fix the problem:
[error] |
[error] | import play.api.libs.ws.DefaultBodyWritables.writeableOf_urlEncodedForm
[error] | import play.api.libs.ws.WSBodyWritables.writeableOf_urlEncodedForm
[error] | import play.api.libs.ws.writeableOf_urlEncodedForm
Importing the whole ws
package fixes the problem.
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.9.5") | ||
addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.5") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See:
Note that the Play sbt-plugin
is only required for the exampleApp
app, not any of the other subprojects.
053c2b0
to
4ef8a99
Compare
See: * #149 - dropping Scala 2.12 * #161 - supporting Scala 3 Explicitly declaring the return type is necessary on many endpoint definitions, or Scala 3 reports an 'ambiguous overload' error: ``` [error] -- [E051] Reference Error: /Users/Roberto_Tyley/code/pan-domain-authentication/pan-domain-auth-example/app/controllers/AdminController.scala:42:15 [error] 42 | def logout = Action { implicit request => [error] | ^^^^^^ [error] |Ambiguous overload. The overloaded alternatives of method apply in trait ActionBuilder with types [error] | (block: play.api.mvc.Request[play.api.mvc.AnyContent] => play.api.mvc.Result): [error] | play.api.mvc.Action[play.api.mvc.AnyContent] [error] | [A] [error] | (bodyParser: play.api.mvc.BodyParser[A]): [error] | play.api.mvc.ActionBuilder[play.api.mvc.Request, A] [error] |both match arguments (<?> => <?>) [error] | [error] | longer explanation available when compiling with `-explain` ``` Panda's `OAuth` class posts some url-encoded data (defined as `Map[String, Seq[String]]` in Scala) with `ws.url(dd.token_endpoint).post`, and this needs an implicit instance of `BodyWritable[Map[String, Seq[String]]]` in order to work! For some reason, in Scala 2, the compiler was able to find the correct implicit somewhere, but in Scala 3 we get a compilation error: ``` [error] 81 | }.flatMap { response => [error] | ^ [error] |Cannot find an instance of Map[K, Seq[String]] to WSBody. Define a BodyWritable[Map[K, Seq[String]]] or extend play.api.libs.ws.ahc.DefaultBodyWritables [error] | [error] |where: K is a type variable with constraint >: String [error] | [error] |One of the following imports might fix the problem: [error] | [error] | [error] |One of the following imports might fix the problem: [error] | [error] | import play.api.libs.ws.DefaultBodyWritables.writeableOf_urlEncodedForm [error] | import play.api.libs.ws.WSBodyWritables.writeableOf_urlEncodedForm [error] | import play.api.libs.ws.writeableOf_urlEncodedForm ``` Importing the whole `ws` package fixes the problem: ``` import play.api.libs.ws._ ```
4ef8a99
to
3e3b1bb
Compare
Need to import
play.api.libs.ws._
for theBodyWritable[Map[String, Seq[String]]]
Panda's
OAuth
class posts some url-encoded data (defined asMap[String, Seq[String]]
in Scala) withws.url(dd.token_endpoint).post
, and this needs an implicit instance ofBodyWritable[Map[String, Seq[String]]]
in order to work! For some reason, in Scala 2, the compiler was able to find the correct implicit somewhere, but in Scala 3 we get a compilation error:Importing the whole
ws
package fixes the problem: