Skip to content

Commit

Permalink
Add explicit types to implicits
Browse files Browse the repository at this point in the history
Scala 2.13 raises compilation warnings (which we have elevated to
errors) for implicits without explicit types. This is to mirror
Scala 3 which requires this.

See:

* scala/scala#10083
* https://github.com/scala/scala/releases/tag/v2.13.11
  • Loading branch information
nicl committed Jun 26, 2023
1 parent a14bfb8 commit 160687f
Show file tree
Hide file tree
Showing 10 changed files with 72 additions and 56 deletions.
8 changes: 5 additions & 3 deletions app/components/AppComponents.scala
Expand Up @@ -167,7 +167,7 @@ class AppComponents(context: Context, identity: AppIdentity)
val elkLoggingStream = configuration.get[Option[String]]("elk.loggingStream")
val elkLogging = new ElkLogging(identity, elkLoggingStream, awsCredsForV2)

implicit val dynamo = {
implicit val dynamo: Dynamo = {
val dynamoClient: DynamoDbClient = DynamoDbClient
.builder()
.credentialsProvider(awsCredsForV2)
Expand Down Expand Up @@ -261,7 +261,9 @@ class AppComponents(context: Context, identity: AppIdentity)
ActorSystem[BakeEvent](Behaviours.guardian(eventListeners), "EventBus")
}

implicit val eventBus = new ActorSystemWrapper(eventBusActorSystem)
implicit val eventBus: ActorSystemWrapper = new ActorSystemWrapper(
eventBusActorSystem
)

val googleAuthConfig = GoogleAuthConfig(
clientId = mandatoryConfig("google.clientId"),
Expand All @@ -273,7 +275,7 @@ class AppComponents(context: Context, identity: AppIdentity)
antiForgeryChecker = AntiForgeryChecker(secretStateSupplier)
)

implicit val packerConfig = PackerConfig(
implicit val packerConfig: PackerConfig = PackerConfig(
stage = stage,
vpcId = configuration.get[Option[String]]("packer.vpcId"),
subnetId = configuration.get[Option[String]]("packer.subnetId"),
Expand Down
2 changes: 1 addition & 1 deletion app/data/DynamoFormats.scala
Expand Up @@ -5,7 +5,7 @@ import org.joda.time.DateTime

object DynamoFormats {

implicit val dateTimeFormat =
implicit val dateTimeFormat: DynamoFormat[DateTime] =
DynamoFormat.coercedXmap[DateTime, String, IllegalArgumentException](
DateTime.parse,
_.toString
Expand Down
63 changes: 32 additions & 31 deletions app/event/BakeEvent.scala
Expand Up @@ -22,43 +22,44 @@ object BakeEvent {

def unapply(event: BakeEvent): Option[BakeId] = Some(event.bakeId)

implicit val eventIdExtractor =
implicit val eventIdExtractor: EventIdExtractor[BakeEvent] =
EventIdExtractor[BakeEvent](e => Some(e.eventId))

implicit val eventDataExtractor = EventDataExtractor[BakeEvent]({ event =>
val json = event match {
case Log(_, log) =>
JsObject(
Seq(
"eventType" -> JsString("log"),
"timestamp" -> JsString(
log.timestamp.toString("YYYY-MM-dd HH:mm:ss")
),
"log" -> JsObject(
Seq(
"level" -> JsString(log.logLevel),
"number" -> JsNumber(log.logNumber),
"messageHtml" -> JsString(log.messageHtml.toString)
implicit val eventDataExtractor: EventDataExtractor[BakeEvent] =
EventDataExtractor[BakeEvent]({ event =>
val json = event match {
case Log(_, log) =>
JsObject(
Seq(
"eventType" -> JsString("log"),
"timestamp" -> JsString(
log.timestamp.toString("YYYY-MM-dd HH:mm:ss")
),
"log" -> JsObject(
Seq(
"level" -> JsString(log.logLevel),
"number" -> JsNumber(log.logNumber),
"messageHtml" -> JsString(log.messageHtml.toString)
)
)
)
)
)
case AmiCreated(_, amiId) =>
JsObject(
Seq(
"eventType" -> JsString("ami-created"),
"amiId" -> JsString(amiId.value)
case AmiCreated(_, amiId) =>
JsObject(
Seq(
"eventType" -> JsString("ami-created"),
"amiId" -> JsString(amiId.value)
)
)
)
case PackerProcessExited(_, exitCode) =>
JsObject(
Seq(
"eventType" -> JsString("packer-process-exited"),
"exitCode" -> JsNumber(exitCode)
case PackerProcessExited(_, exitCode) =>
JsObject(
Seq(
"eventType" -> JsString("packer-process-exited"),
"exitCode" -> JsNumber(exitCode)
)
)
)
}
json.toString()
})
}
json.toString()
})

}
2 changes: 1 addition & 1 deletion app/models/BakeStatus.scala
Expand Up @@ -17,7 +17,7 @@ object BakeStatus extends Enum[BakeStatus] {
case object TimedOut extends BakeStatus
case object DeletionScheduled extends BakeStatus

implicit val dynamoFormat = {
implicit val dynamoFormat: DynamoFormat[BakeStatus] = {
def fromString(s: String): Either[DynamoReadError, BakeStatus] =
Either.fromOption(
withNameOption(s),
Expand Down
30 changes: 17 additions & 13 deletions app/models/CustomisedRole.scala
Expand Up @@ -39,18 +39,21 @@ object ListParamValue {
def of(params: String*) = ListParamValue(params.map(SingleParamValue).toList)
}
object ParamValue {
implicit val format = DynamoFormat.xmap[ParamValue, String](
fastparse
.parse(_, CustomisedRole.paramValue(_))
.fold(
(_, _, _) =>
Left(
TypeCoercionError(new RuntimeException("Unable to read ParamValue"))
),
(pv, _) => Right(pv)
),
_.quoted
)
implicit val format: DynamoFormat[ParamValue] =
DynamoFormat.xmap[ParamValue, String](
fastparse
.parse(_, CustomisedRole.paramValue(_))
.fold(
(_, _, _) =>
Left(
TypeCoercionError(
new RuntimeException("Unable to read ParamValue")
)
),
(pv, _) => Right(pv)
),
_.quoted
)
}

object CustomisedRole {
Expand Down Expand Up @@ -94,6 +97,7 @@ object CustomisedRole {
}
}

implicit val format = implicitly[DynamoFormat[CustomisedRole]]
implicit val format: DynamoFormat[CustomisedRole] =
implicitly[DynamoFormat[CustomisedRole]]

}
4 changes: 3 additions & 1 deletion app/models/packer/PackerBuildConfig.scala
@@ -1,6 +1,7 @@
package models.packer

import play.api.libs.json.Json
import play.api.libs.json.OWrites

/** Case class representation of a Packer json file
*/
Expand All @@ -11,5 +12,6 @@ case class PackerBuildConfig(
)

object PackerBuildConfig {
implicit val jsonWrites = Json.writes[PackerBuildConfig]
implicit val jsonWrites: OWrites[PackerBuildConfig] =
Json.writes[PackerBuildConfig]
}
4 changes: 3 additions & 1 deletion app/models/packer/PackerProvisionerConfig.scala
Expand Up @@ -5,6 +5,7 @@ import java.nio.file.{Files, Path}
import play.api.libs.json.Json

import scala.jdk.CollectionConverters._
import play.api.libs.json.OWrites

case class PackerProvisionerConfig(
`type`: String,
Expand All @@ -19,7 +20,8 @@ case class PackerProvisionerConfig(
)

object PackerProvisionerConfig {
implicit val jsonWrites = Json.writes[PackerProvisionerConfig]
implicit val jsonWrites: OWrites[PackerProvisionerConfig] =
Json.writes[PackerProvisionerConfig]

def fileCopy(source: Path, destination: String) = PackerProvisionerConfig(
`type` = "file",
Expand Down
4 changes: 3 additions & 1 deletion app/models/packer/PackerVariablesConfig.scala
Expand Up @@ -3,6 +3,7 @@ package models.packer
import models.Bake
import org.joda.time.format.DateTimeFormat
import play.api.libs.json.Json
import play.api.libs.json.OWrites

case class PackerVariablesConfig(
recipe: String,
Expand All @@ -12,7 +13,8 @@ case class PackerVariablesConfig(
)

object PackerVariablesConfig {
implicit val jsonWrites = Json.writes[PackerVariablesConfig]
implicit val jsonWrites: OWrites[PackerVariablesConfig] =
Json.writes[PackerVariablesConfig]

val format = DateTimeFormat.forPattern("yyyy/MM/dd_HH-mm-ss")
def apply(bake: Bake): PackerVariablesConfig = {
Expand Down
3 changes: 2 additions & 1 deletion app/prism/RecipeUsage.scala
Expand Up @@ -5,6 +5,7 @@ import models.{AmiId, Bake, BakeId, Recipe, RecipeId}
import play.api.libs.json.Json
import prism.Prism.{Image, Instance, LaunchConfiguration}
import services.PrismData
import play.api.libs.json.OWrites

case class Ami(account: String, id: AmiId)

Expand All @@ -19,7 +20,7 @@ case class BakeUsage(
case class SimpleBakeUsage(bakeId: BakeId, packageListS3Location: String)

object SimpleBakeUsage {
implicit val writes = Json.writes[SimpleBakeUsage]
implicit val writes: OWrites[SimpleBakeUsage] = Json.writes[SimpleBakeUsage]

def fromBakeUsage(
bakeUsage: BakeUsage,
Expand Down
8 changes: 5 additions & 3 deletions test/prism/PrismSpec.scala
Expand Up @@ -16,6 +16,7 @@ import prism.Prism.{AWSAccount, Instance, LaunchConfiguration}
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
import play.api.http.DefaultFileMimeTypes

class PrismSpec extends AnyFlatSpec with Matchers {

Expand All @@ -24,9 +25,10 @@ class PrismSpec extends AnyFlatSpec with Matchers {
Configuration.load(environment),
environment
).get
implicit val fileMimeTypes = new DefaultFileMimeTypesProvider(
httpConfiguration.fileMimeTypes
).get
implicit val fileMimeTypes: DefaultFileMimeTypes =
new DefaultFileMimeTypesProvider(
httpConfiguration.fileMimeTypes
).get

val controllerComponents = stubControllerComponents()

Expand Down

0 comments on commit 160687f

Please sign in to comment.