Skip to content
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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on Nov 28, 2024

  1. Support Scala 3, drop Scala 2.12 & Play 2.8

    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._
    ```
    rtyley committed Nov 28, 2024
    Configuration menu
    Copy the full SHA
    3e3b1bb View commit details
    Browse the repository at this point in the history